Jak zrobić coś dla każdego pliku w katalogu za pomocą skryptu wsadowego


265

Jak iterować każdy plik w katalogu z plikiem .bat lub .cmd?

Dla uproszczenia proszę podać odpowiedź, która po prostu odzwierciedla nazwę pliku lub ścieżkę pliku.

Odpowiedzi:


348

Wykorzystanie wiersza poleceń:

for /f %f in ('dir /b c:\') do echo %f

Wykorzystanie pliku wsadowego:

for /f %%f in ('dir /b c:\') do echo %%f

Aktualizacja : jeśli katalog zawiera pliki ze spacjami w nazwach, musisz zmienić separator, którego for /fużywa polecenie. na przykład możesz użyć znaku potoku.

for /f "delims=|" %%f in ('dir /b c:\') do echo %%f

Aktualizacja 2 : (szybko półtora roku po oryginalnej odpowiedzi :-)) Jeśli nazwa katalogu ma spację w nazwie, możesz użyć usebackqopcji na for:

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files"`) do echo %%f

A jeśli chcesz użyć przekierowania wyjściowego lub potoku poleceń, użyj znaku esc ( ^):

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f

3
Przynajmniej dla niektórych poleceń zmienna pliku powinna być ujęta w podwójne cudzysłowy.
Jirka

1
Dlaczego jest /fpotrzebny po for? Zgodnie z dokumentami pomocy /fflaga otwiera się i odczytuje każdy plik. Czy jest to potrzebne do echa lub zmiany nazwy plików?
Snekse

17
/fPo FORogranicza ją do plików. Podobnie /dogranicza się do katalogów (folderów) i /rnakazuje rekurencję.

3
+1 To jest żywa odpowiedź, do której nieustannie się uczęszcza; Wielkie dzięki.
Sabuncu

4
Właśnie zdałem sobie sprawę, że musisz użyć cudzysłowów ... Zamiast 'dir /b "c:\program files"'tego powinno być`dir /b "c:\program files"`
endavid

101

Alternatywnie użyj:

forfiles /s /m *.png /c "cmd /c echo @path"

Polecenie forfiles jest dostępne w systemie Windows Vista i nowszych.


1
używanie ścieżek ze spacjami w drugiej powłoce cmd było trudne. Na koniec dostosowałem% PATH% env var, aby wykonać zadanie. Ale dzięki. pomocny
twobob

70

Najłatwiejsza metoda:

Z wiersza poleceń użyj:

for %f in (*.*) do echo %f

Z pliku wsadowego (dwukrotnie znak% procent):

for %%f in (*.*) do echo %%f

Z pliku wsadowego z folderem określonym jako pierwszy parametr:

for %%f in (%1\*.*) do echo %%f

8
nie tylko najłatwiejszy, ale także znacznie bardziej elegancki w porównaniu do oceny dir /Bwydajności za pomocą for.
syneticon-dj

5
Dodaj a / r przed% f, aby ponownie wyświetlić podkatalogi
PRMan

35

Posługiwać się

for /r path %%var in (*.*) do some_command %%var

z:

  • ścieżka jest ścieżką początkową.
  • %% var jest jakimś identyfikatorem.
  • *. * jest maską pliku LUB zawartością zmiennej.
  • some_command jest poleceniem do wykonania ze ścieżką i zmienną var połączoną jako parametry.

2
Pojawia się błąd: %%var was unexpected at this time.czy możesz podać dokładny przykład? Wypróbowałem kilka odmianfor /r . %%var in (*.*) do echo %%var
hippietrail

3
Z jakiegoś dziwnego powodu nazwa zmiennej jest ograniczona do jednego znaku.
ollb

2
Czy możemy używać różnych emotikonów dla różnych rezultatów?
Silver Quettier


-1

Miałem złośliwe oprogramowanie, które oznaczało wszystkie pliki w katalogu jako ukryte / systemowe / tylko do odczytu. Jeśli ktokolwiek znajdzie się w takiej sytuacji, przejdź do katalogu i uruchom for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.