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.
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 pofor
? 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
PoFOR
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:
Polecenie forfiles jest dostępne w systemie Windows Vista i nowszych.
źródło
Najłatwiejsza metoda:
Z wiersza poleceń użyj:
Z pliku wsadowego (dwukrotnie znak% procent):
Z pliku wsadowego z folderem określonym jako pierwszy parametr:
źródło
dir /B
wydajności za pomocąfor
.Posługiwać się
z:
źródło
%%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:
źródło
"%~nf"
oznacza nazwę pliku bez rozszerzenia, gdzief
jest nazwą zmiennej określonej wfor
części. Dokumenty: docs.microsoft.com/en-us/previous-versions/windows/it-pro/…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
.źródło