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.
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:
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 /f
uż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ć usebackq
opcji 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
/f
potrzebny po for
? Zgodnie z dokumentami pomocy /f
flaga otwiera się i odczytuje każdy plik. Czy jest to potrzebne do echa lub zmiany nazwy plików?
/f
Po FOR
ogranicza ją do plików. Podobnie /d
ogranicza się do katalogów (folderów) i /r
nakazuje rekurencję.
'dir /b "c:\program files"'
tego powinno być`dir /b "c:\program files"`
Alternatywnie użyj:
forfiles /s /m *.png /c "cmd /c echo @path"
Polecenie forfiles jest dostępne w systemie Windows Vista i nowszych.
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
dir /B
wydajności za pomocą for
.
Posługiwać się
for /r path %%var in (*.*) do some_command %%var
z:
%%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
Inny sposób:
for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi"
"%~nf"
oznacza nazwę pliku bez rozszerzenia, gdzie f
jest nazwą zmiennej określonej w for
części. Dokumenty: docs.microsoft.com/en-us/previous-versions/windows/it-pro/…