Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa

Darmowa diagnoza laptopa

Dojazd do klienta bezpłatnie

Dojazd do klienta bezpłatnie

Laptopy zastępcze bezpłatnie

Laptopy zastępcze bezpłatnie

Odbiór i zwrot sprzętu bezpłatnie

Odbiór i zwrot sprzętu bezpłatnie

for nie iteruje po plikach

Termin Definicja
for nie iteruje po plikach

for nieiterujące po plikach wskazuje na niepoprawną składnię pętli wsadowej lub błędnie podaną maskę wzorca w poleceniu.

Jak działa iteracja po plikach w poleceniu FOR

Polecenie for w interpreterze wiersza poleceń Windows cmd.exe wykonuje wskazane polecenie dla kolejnych elementów określonych w zbiorze. Przy iterowaniu po plikach zbiór znajduje się zwykle w nawiasach i zawiera maskę, na przykład *.txt. W powłoce uruchomionej interaktywnie poprawna postać może wyglądać tak: for %F in (*.txt) do echo %F. Taka instrukcja wyszukuje pliki tekstowe w bieżącym katalogu i wyświetla ich nazwy. Zmienna używana przez pętlę musi mieć jednoliterową nazwę, poprzedzoną pojedynczym znakiem procentu.

W pliku wsadowym z rozszerzeniem .bat lub .cmd składnia zmiennej jest inna. Znak procentu trzeba podwoić, dlatego odpowiednikiem wcześniejszego przykładu jest for %%F in (*.txt) do echo %%F. Pojedynczy zapis %F w pliku wsadowym może zostać zinterpretowany jako parametr skryptu albo doprowadzić do błędnego rozwinięcia instrukcji. Jest to jedna z najczęstszych przyczyn sytuacji, w której pętla nie wykonuje się zgodnie z oczekiwaniem albo nie znajduje żadnych plików.

Różnica między maską plików a dosłownym tekstem

Element znajdujący się po in nie jest dowolnym opisem katalogu, lecz zbiorem obsługiwanym przez polecenie for. Maska *.log oznacza nazwy z rozszerzeniem .log, natomiast raport-*.csv ogranicza dopasowanie do nazw rozpoczynających się od raport-. Maska musi wskazywać rzeczywiste położenie względem bieżącego katalogu. Jeżeli skrypt jest uruchamiany z innego katalogu niż zakładano, względna ścieżka może nie prowadzić do plików, mimo że sama składnia pętli jest poprawna. W takiej sytuacji warto użyć jawnej ścieżki, na przykład for %%F in ("C:\Dane\*.csv") do echo %%~F.

Cudzysłowy są potrzebne szczególnie wtedy, gdy ścieżka zawiera spacje. Trzeba jednak rozróżnić wartość zmiennej z cudzysłowami od wartości bez nich. Zapis %%F może zawierać element w formie ujętej w cudzysłowy, dlatego przy przekazywaniu ścieżki do innych poleceń często stosuje się modyfikator %%~F, który usuwa zewnętrzne cudzysłowy. Inne modyfikatory pozwalają pobrać wybrane części ścieżki, między innymi %%~nF dla nazwy pliku oraz %%~xF dla rozszerzenia. Niepoprawne cytowanie może powodować błędy, które wyglądają jak brak działania iteracji, choć problem występuje dopiero w poleceniu wykonywanym wewnątrz pętli.

Zakres działania oraz odmiany polecenia FOR

Podstawowe for przetwarza pliki dopasowane w bieżącym katalogu, ale nie przechodzi automatycznie do podkatalogów. Do rekursywnego wyszukiwania służy przełącznik /R, na przykład for /R "C:\Dane" %%F in (*.txt) do echo %%F. Jeżeli potrzebne są wyłącznie katalogi, używa się przełącznika /D. Wybór niewłaściwej odmiany jest częstym źródłem nieporozumień: pętla może poprawnie działać dla plików znajdujących się bezpośrednio w podanym katalogu, ale nie przetworzyć plików z jego podkatalogów, gdy pominięto /R.

Przełącznik /F ma inne znaczenie niż zwykłe iterowanie po nazwach plików. for /F służy do odczytywania wierszy z pliku, wyniku polecenia lub podanego tekstu i domyślnie dzieli dane na tokeny według białych znaków. Nie jest więc zamiennikiem maski plików. Przykładowo for /F "delims=" %%F in (lista.txt) do echo %%F odczytuje całe wiersze pliku lista.txt, natomiast nie wyszukuje wszystkich plików pasujących do wzorca. Warto również pamiętać, że znaki specjalne powłoki, takie jak &, |, < i >, mogą wymagać odpowiedniego cytowania lub ucieczki znakiem ^, jeżeli występują w nazwach albo poleceniach.

Sprawdzenie skryptu i naprawa przyczyny braku wyników

Diagnostykę najlepiej rozpocząć od ustalenia bieżącego katalogu poleceniem cd albo echo %CD%, a następnie sprawdzenia samej maski za pomocą polecenia dir. Jeżeli dir *.txt nie pokazuje żadnych plików, pętla for również nie otrzyma oczekiwanych elementów. Następnie należy sprawdzić, czy skrypt jest uruchamiany w pliku wsadowym, czy wpisywany bezpośrednio w konsoli, ponieważ determinuje to użycie odpowiednio %%F albo %F. Pomoc dotycząca składni jest dostępna po wpisaniu for /?. Warto testować także samo polecenie wykonywane w pętli, zaczynając od prostego echo, aby oddzielić problem wyszukiwania plików od problemu działania dalszej komendy.

Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów, komputerów PC i ich podzespołów, w tym diagnozowaniem problemów z uruchamianiem skryptów wsadowych oraz poleceń systemu Windows. Przy analizie przypadku, w którym for nie iteruje po plikach, sprawdzenia wymagają między innymi typ pliku skryptu, liczba znaków procentu przy zmiennej, bieżący katalog, poprawność maski, obecność podkatalogów oraz sposób cytowania ścieżki. Takie rozdzielenie kolejnych etapów pozwala ustalić, czy błąd wynika z samej składni pętli, z nieistniejących lub niedopasowanych plików, czy z polecenia uruchamianego dla każdego znalezionego elementu.