echo off echo ola.txt >> ala.txt pause W wyniku wykonania przedstawionego skryptu
echo off echo ola.txt >> ala.txt pauseW wyniku wykonania przedstawionego skryptu
A. zawartość pliku ala.txt zostanie skopiowana do pliku ola.txt
B. zostanie wpisany tekst ala.txt do pliku ola.txt
C. zostanie wpisany tekst ola.txt do pliku ala.txt
D. zawartość pliku ola.txt zostanie skopiowana do pliku ala.txt
Pytanie z egzaminu CKE, październik 2016 (arkusz E.12-X-16.08).
W tym skrypcie polecenie echo nie odczytuje zawartości pliku, tylko wypisuje podany po nim tekst. Linia echo ola.txt >> ala.txt oznacza więc: dopisz napis ola.txt do pliku ala.txt. Operator >> to przekierowanie strumienia wyjściowego w konsoli Windows CMD z dopisywaniem na końcu pliku. Jeżeli plik ala.txt już istnieje, tekst zostanie dodany na jego końcu, zwykle jako nowa linia. Jeżeli plik nie istnieje, system go utworzy. Moim zdaniem to jedna z tych rzeczy, które warto sprawdzić samemu w wierszu poleceń, bo łatwo pomylić nazwę pliku z jego zawartością. Gdyby celem było dopisanie zawartości pliku ola.txt do ala.txt, użyłoby się raczej polecenia type ola.txt >> ala.txt. Samo echo off wyłącza wyświetlanie wykonywanych poleceń, a pause zatrzymuje skrypt i czeka na naciśnięcie klawisza. Dobra praktyka w plikach BAT/CMD to często używanie @echo off na początku, żeby nie pokazywać także tej pierwszej komendy.
Najczęstsza pomyłka w tym zadaniu wynika z traktowania nazwy ola.txt tak, jakby system automatycznie rozumiał ją jako plik do odczytania. W poleceniu echo tak to nie działa. Echo wypisuje tekst podany po komendzie, więc zapis ola.txt jest zwykłym ciągiem znaków, a nie poleceniem kopiowania ani otwierania pliku. W Windows CMD do pracy z zawartością plików stosuje się inne polecenia, na przykład type do wyświetlenia zawartości pliku, copy do kopiowania pliku albo xcopy/robocopy przy bardziej rozbudowanych operacjach. Operator >> też bywa mylący. Nie oznacza on kierunku kopiowania między dwoma plikami, tylko przekierowanie standardowego wyjścia programu do pliku, z dopisaniem na końcu. Znak > nadpisuje plik, a >> dopisuje dane. Dlatego ala.txt jest tutaj celem zapisu, nie źródłem danych. Odwrotna interpretacja, czyli że tekst ala.txt trafi do ola.txt, nie pasuje do składni, bo po prawej stronie operatora przekierowania znajduje się plik docelowy. Warto też pamiętać, że pause nie wpływa na pliki, tylko zatrzymuje wykonanie skryptu, aby użytkownik zobaczył wynik pracy lub komunikaty. Z mojego doświadczenia takie zadania najlepiej rozwiązywać, czytając komendę od lewej strony: co program wypisuje, gdzie jest przekierowanie i czy użyto > czy >>.