T: Instrukcje warunkowe i pętle.
Instrukcje warunkowe
IF - polecenie służy do określenia kolejności wykonywania instrukcji w plikach wsadowych. Jeśli warunek przy instrukcji IF jest spełniony, system
Windows 2000 wykona określoną komendę. Jeśli nie zignoruje ją. Składnia nie przewiduje stosowania członu THEN.
IF [not] errorlevel poziom polecenie
Polcenie testuje kod wyjściowy poprzedniego polecenia. Polecenie zakończyło się sukcesem, jeśli zwróciło kod o wartości zero. Zwrócenie wartości innej niż zero oznacza błąd podczas wykonywania polecenia. Warunek jest prawdziwy, jeśli poprzednie polecenie zwróciło kod błędu równy bądź większy od poziomu. Kod błędu ostatnio wykonywanego polecenia jest również przechowywany w zmiennej %ERRORLEVEL%.
IF [not][/I] łańcuch1==łańcuch2
Polecenie sprawdza czy dwa łańcuchy są sobie równe. Jeśli zawierają spacje lub są nazwami zmiennych muszą być otoczone cudzysłowami. Jeśli porównujemy
wartości parametrów, które mogą już zawierać cudzysłowy, należy otoczyć łańcuchy innymi znakami ograniczającymi np. nawiasami klamrowymi
IF [not] exist plik polecenie
Polecenie sprawdza czy istnieje określony plik. Można korzystać z pełnych ścieżek i wzorców nazw. Jeśli został określony wzorzec to warunek jest
spełniony, gdy istnieje przynajmniej jeden plik pasujący do wzorca. Można także sprawdzać istnienie katalogu podając jego nazwę w argumencie plik.
Przykłady praktyczne wykorzystania instrukcji warunkowej:
if exist h: chkdsk h: /f
if not exist h:\soisk md h:\soisk
if not exist c:\config.sys copy c:\windows\system32\config.nt c:\config.sys
if exist z: (dir z:) else (dir y:)
if [/I] wartość1 op wartość2 polecenie
== - porównuje łańcuchy albo liczby. Dwie wartości są porównywane za pomocą operatora. Dozwolone są następujące operatory porównania (op):
EQU == (dwa znaki równości); dwa ciągi znaków są równe.
NEQ - dwa ciągi znaków są różne.
LSS - pierwszy ciąg znaków jest leksykalnie mniejszy niż drugi.
LEQ - pierwszy ciąg znaków jest leksykalnie mniejszy lub równy drugiemu.
GTR - pierwszy ciąg znaków jest leksykalnie większy od drugiego.
GEQ - pierwszy ciąg znaków jest leksykalnie większy lub równy drugiemu.
Opcja /I oznacza, że wielkość liter w porównywanych łańcuchach nie jest brana pod uwagę.
Pętle
FOR - tradycyjna pętla indeksowana:
For /L %%zmienna IN (start, skok , koniec) do polecenie
Podany parametr skryptu jest inicjowany przez wartość start, zwiększany o wartość skok za każdym wykonaniem pętli, pętla kończy działanie, gdy przekroczy limit wyznaczony przez koniec. Opcja /L – iteruje ciąg numeryczny.
Pętla dla wszystkich elementów listy:
for %%zmienna in (zestaw) do polecenie
parametr jest kolejno przypisywany każdemu elementowi z listy. Parametr %%zmienna może być wykorzystany do wykonania polecenia for w programie wsadowym. Parametr %zmienna może być wykorzystany do wykonania polecenia for z wiersza polecenia. Przykłady:
for /L %i in (10,-1,1) do @echo "instrukcja pętli nr - %i"
Pętla podana z wiersza poleceń:
for /L %i in (21,1,34) do ping -n 1 192.168.19.%i
Pętla stosowana w plikach wsadowych:
for /l %%i in (21,1,34) do ping -n 1 192.168.10.%%i
Pętla w pętli (pętla zewnętrzna i wewnętrzna):
for /l %i in (0,1,9) do for /l %j In (0,1,9) do md katalog%i%j
for %i in (c:\windows\*.ini) do echo %i #wyświetlenie nazw plików spełniających warunek *.ini
Zadanie1:
Wykorzystując polecenia systemu DOS utwórz plik tekstowy w katalogu h:\soisk o nazwie numerymac.txt zawierający numery sprzętowe kart
sieciowych hostów z pracowni komputerowej z zakresu IP od 192.168.19.30 do 192.168.19.34.
Zadanie2:
Odszukaj informacje na temat poleceń skryptowych w systemowej Pomocy i obsłudze technicznej.
Przykład skryptu z opcją wyboru dla użytkownika (działa w starszych systemach DOS):
@echo off
echo Chcesz uruchomić edytor tekstu?
echo tak = t nie = n
choice /c:tn /tn,5 /n
if errorlevel 2 goto koniec
if errorlevel 1 goto edytor
:edytor
edit.com
goto koniec
:koniec
cls
Przykład zastosowania pętli z podanymi wartościami zmiennej:
@echo off
cls
FOR %%w IN (pomidor, rzodkiewka, ziemniak) DO echo To jest %%w
pause
Przykład zastosowania pętli w pętli z podanymi wartościami:
@echo off
cls
FOR %%o IN (garnek, patelnia) DO (FOR %%w IN (pomidorem, rzodkiewka, ziemniakem, burakiem) DO echo To jest %%o z %%w )
pause
Przykład zapętlenia:
@echo off
cls
FOR %%a IN (0 1 2 3) DO (
FOR %%b IN (0 1 2 3 4 5 6 7 8 9) DO echo %%a%%b
)
pause
Przykład zapętlenia:
@echo off
cls
echo Start > wynik.txt
FOR %%a IN (0 1 2 3) DO (
FOR %%b IN (0 1 2 3 4 5 6 7 8 9) DO (
FOR %%c IN (0 1 2 3 4 5 6 7 8 9) DO (
echo %%a%%b%%c >>wynik.txt
)
)
)
pause
Przykład z ukrywaniem partycji (nie używanymi przez system):
@if exist d: (
)
else (
mountvol d: \\?\Volume{identyfikator_dysku_d}\
)