mgr inż. Wacław Libront * Bobowa 2020

ZSO Bobowa, ul. Długoszowskich 1, 38-350 Bobowa, tel: 0183530220, fax: 0183530221, email: sekretariat@zsobobowa.eu, www: zsobobowa.eu

Lekcja 05

CMD - Pliki wsadowe - Parametry

  1. Wstęp
  2. Parametry - przykłady
  3. SHIFT
  4. FOR
  5. Ćwiczenia

Wstęp

Pliki wsadowe mogą pobierać argumenty (parametry). Wewnątrz programu wsadowego parametry jego wywołania reprezentowane są przez napisy od %1 do %9 Pierwszy parametr %1, drugi %2 itd. Parametr %0 reprezentuje wykonywany plik. Parametry możemy wpisywać ręcznie lub przeciągać pliki myszką na ikonę aplikacji wsadowej.

W konsoli możemy wpisywać pełną nazwę pliku wsadowego wraz z rozszerzeniem lub pominąć rozszerzenie - system je rozpozna automatycznie uruchomi.


Parametry - przykłady

TEST
Plik wsadowy TEST.BAT zawiera polecenie
ECHO %1

Po uruchomieniu pliku wsadowego z parametrem
TEST.BAT „Ala ma kota”
na ekranie wyświetlony zostanie napis „Ala ma kota”

Program wsadowy będzie przetwarzał napis jako parametr %1. Jeżeli plik wsadowy TEST.BAT zawierałby instrukcję
echo %4 %3 %2 %1
to uruchomienie go spowoduje wyświetlenie parametrów w odwrotnej kolejności.

WYSZUKAJ
Plik wsadowy SZUKAJ.BAT zawiera polecenie
FIND %1 %2

Parametr 1 jest tekstem do wyszukania
Parametr 2 jest plikiem, w którym szukamy
Po wywołaniu polecenia
SZUKAJ.BAT ”przychodzi baba” baba.zar
program wsadowy wyszuka wszystkie wiersze w których znajduje się tekst „przychodzi baba” w pliku baba.zar

UWAGA CUDZYSŁÓW
Jeżeli w pliku wsadowym mamy
FIND ”%1” %2

Parametr %1 w cudzysłowie, to możemy przy uruchamianiu polecenia możemy pominąć cudzysłów i wywołać plik
SZUKAJ przychodzi baba.zar
Działa to tylko dla parametrów zawierających  tylko jeden wyraz!

WYSZUKAJ 2
Plik wsadowy SZUKAJ.BAT zawiera
@ECHO OFF
cls
REM sprawdzamy czy jest drugi parametr - cudzysłów
IF "%2"=="" GOTO param
REM sprawdzamy czy plik istnieje
IF NOT EXIST %2 GOTO plik

REM wyszukujemy gdy jest 2 parametry i plik na dysku
FIND %1 %2
GOTO koniec

REM brak drugiego parametru
:param
echo potrzebne 2 parametry: "tekst do wyszukania" i plik, gdzie szukamy
GOTO koniec

REM brak pliku na dysku
:plik
echo Brak pliku: %2
GOTO koniec

REM koniec programu
:koniec
ECHO ON

Sprawdzanie są 2 parametry (najpierw drugi) i czy jest plik na dysku.  Poszczególne części programu zostały opatrzone stosownymi komentarzami ułatwiającymi zrozumienie działania.

USUWANIE
Plik wsadowy USUWANIE.BAT usunie plik podany jako argument
@ECHO OFF
IF EXIST %1 GOTO Usuwaj
ECHO Plik %1 nie istnieje...
GOTO Koniec

:Usuwaj
ECHO Usuwanie pliku %1 ...
DEL %1 > NUL
ECHO Wykonane...

:Koniec

Sprawdzany jest parametr, najpierw czy plik, a potem czy jest podany parametr.


Polecenie SHIFT

Polecenie SHIFT zmienia kolejność parametrów przekazywanych do programu wsadowego. Bez żadnych opcji polecenie przesuwa każdy argument o jedną pozycję w lewo - do początku listy argumentów - powodując, że drugiemu argumentowi wiersza poleceń odpowiada %1, trzeciemu %2 i tak dalej.

KOPIOWANIE
Kopiowanie plików o rozszerzeniach podanych jako kolejne parametry. Po każdym skopiowaniu plików, przesuwany jest parametr na kolejną pozycję, do momentu aż wyczerpie się pila parametrów i sprawdzany będzie pusty.

:KOPIOWANIE
REM Jeżeli nie ma parametru %1, przeskok do etykiety END
%1 musi być w cudzysłowie !!! jeśli tekst parametry w cudzysłowie
If ”%1”=="" GOTO END

REM Kopiowanie plików z rozszerzeniem określonym parametrem %1
COPY C:\*.%1 D:\

REM Przesunięcie parametrów.
SHIFT
GOTO KOPIOWANIE

REM koniec
:END

Uruchomienie programu z trzema parametrami:
PLIK.BAT bat com exe
spowoduje usunięcie wszystkich plików z takimi rozszerzeniami


Pętla iteracyjna FOR

Instrukcja FOR powtarza polecenie dla każdej pozycji w zadanym zbiorze, przypisując danej zmiennej sterującej pętlą, kolejne wartości z tego zbioru. W ten sposób umożliwia ona np. uruchomienie określonego polecenia dla każdego pliku znajdującego się w zbiorze. W przypadku, gdy komenda FOR jest wpisywana w linii poleceń, to nazwa zmiennej musi być poprzedzona jednym znakiem %. W przypadku, gdy komenda ta znajduje się w pliku wsadowym, wymagane jest poprzedzenie zmiennej sterującej dwoma znakami procent - %%.

Wersje polecenia FOR dla wywołania z konsoli

FOR %i IN (1 3 5 -1) DO ECHO %i
Wyświetlane są kolejne liczby z listy

FOR %i IN (*.*) DO @echo %i
Wyświetlane są pliki o dowolnej nazwie z bieżącego foldera.
Znak @ przed poleceniem echo - eliminuje wyświetlanie polecenia.

FOR %i IN (*.bat) DO TYPE %i
Na ekranie wyświetlone wszystkie pliki z rozszerzeniem bat.

FOR /D %i IN (*.*) DO @echo %i
Zamiast plików wyszukiwane są katalogi.

FOR /L %i IN (1,1,5) do ECHO %i
PPętla generuje kolejne liczby całkowite od 1, do 5, co 1

FOR /F %i IN (plik.txt) DO ECHO %i
Wyświetlane są kolejne wiersze z plikubr>

Skrypt zawierający poprzednią pętlę:
@ECHO FF
FOR %%I IN (*.*) DO ECHO %%I
ECECHO on

Zmienna sterująca pętlą - I z dwoma znakami procent.

PLIKI
Stwórz program wsadowy, który będzie tworzył 1000 plików tekstowych o następującej konstrukcji: plik000.txt do plik999.txt

@echo off
for /L %%X n (0,1,9) do echo %%X
Pętla produkuje liczby 0..9

@echo off
for /L %%X in (0,1,9) do for /L %%Y in (0,1,9) do echo %%X%%Y
Pętla produkuje liczby 00..99. Jeśli będzie %%X %%Y, to liczby 0 0 do 9 9 ze spacją w środku.

@echo off
for /L %%X in (0,1,9) do (
for /L %%Y in (0,1,9) do (
for /L %%Z in (0,1,9) do (
echo %%X%%Y%%Z
)
)
)

UWAGA - w pętlach zastosowano instrukcję grupującą - nawiasy, które umożliwiają wykonanie w pętli wielu poleceń.

Zadanie to można zrealizować inaczej
zamiast polecenia ECHO %%X%%Y%%Z
wystarczy ECHO plik%%X%%Y%%Z.txt
i całe polecenie w konsoli skierować nie na ekran konsoli. ale do pliku z rozszerzeniem TXT

TWORZENIE FOLDERÓW
FOR /F %i IN (naz.txt) DO MD FOLDER\%i
W pliku naz.txt znajdują się nazwy folderów do utworzenia (w każdym wierszu jedna nazwa)
Polecenie odczytuje po jednym wierszu z pliku naz.txt i tworzy w folderze FOLDER nowy folder o odczytanej nazwie.


Ćwiczenia

ŁĄCZENIE PLIKÓW
Utwórz program wsadowy, który połączy w jeden plik pliki podane jako parametry. Wykorzystaj polecenie SHIFT i sprawdź, kiedy pierwszy parametr będzie pusty.

EGZAMIN
Przygotuj program wsadowy, który utworzy folder EGZAMIN, a w środku kolejne foldery, których lista znajduje się w pliku tekstowym podanym jako parametr. Skorzystaj z polecenia FOR /F...

EGZAMIN2
Przygotuj program wsadowy, który utworzy folder EGZAMIN, a w środku foldery z kolejnymi numerami 0-9. Skorzystaj z polecenia FOR /L... Po utworzeniu foldera skopiuj do niego wszystkie pliki, znajdujące się w folderze, którego nazwę podajemy jako parametr.

EGZAMIN3
Przygotuj program wsadowy, który skopiuje wszystkie pliki znajdujące się w osobnych folderach, foldera podanego jako parametr, do foldera EGZAMIN. Skorzystaj z polecenia FOR /D... Aby pliki uczniów się nie pomieszały, do każdej kopiowanej nazwy pliku dopisz na początku nazwę foldera, z którego plik jest kopiowany. Na przykład plik TEST.TXT znajduje się w folderze WL, to skopiowany plik powinien mieć nazwę WL_TEST.TXT.