Jak mogę iterować każdy plik w katalogu za pomocą for
pętli?
A skąd mam wiedzieć, czy określony wpis jest katalogiem, czy tylko plikiem?
windows
batch-file
for-loop
cmd
Vhaerun
źródło
źródło
Odpowiedzi:
Lista zawiera wszystkie pliki (i tylko pliki) w bieżącym katalogu:
Również jeśli uruchomisz to polecenie w pliku wsadowym, musisz podwoić znaki%.
(dzięki @agnul)
źródło
for /r %i in (*) do ( echo %~nxi )
. Ten wątek może być naprawdę przydatny też: stackoverflow.com/questions/112055/... .Iteruj przez ...
for %f in (.\*) do @echo %f
for /D %s in (.\*) do @echo %s
for /R %f in (.\*) do @echo %f
for /R /D %s in (.\*) do @echo %s
Niestety nie znalazłem żadnego sposobu na iterację plików i podkatalogów w tym samym czasie.
Po prostu użyj cygwina z bash, aby uzyskać znacznie większą funkcjonalność.
Poza tym: Czy zauważyłeś, że wbudowana pomoc MS Windows jest doskonałym źródłem opisów składni wiersza poleceń cmd?
Zobacz także: http://technet.microsoft.com/en-us/library/bb490890.aspx
źródło
%file
i%subdir
może być jedną postać długa, czyli tylko%f
,%s
.Aby iterować po każdym pliku, zadziała pętla for:
for %%f in (directory\path\*) do ( something_here )
W moim przypadku chciałem również zawartość pliku, nazwę itp.
Doprowadziło to do kilku problemów i pomyślałem, że mój przypadek użycia może pomóc. Oto pętla, która odczytuje informacje z każdego pliku „.txt” w katalogu i pozwala ci coś z tym zrobić (na przykład setx).
* Ograniczenie: val <= %% f pobierze tylko pierwszą linię pliku.
źródło
Istnieje subtelna różnica między uruchomieniem
FOR
z wiersza poleceń a pliku wsadowego. W pliku wsadowym musisz umieścić dwa%
znaki przed każdym odwołaniem do zmiennej.Z wiersza poleceń:
Z pliku wsadowego:
źródło
Ta pętla for wyświetli wszystkie pliki w katalogu.
„delims =” jest przydatne do wyświetlania długich nazw plików ze spacjami ....
„/ b” pokazuje tylko nazwy, a nie daty wielkości itp.
Kilka rzeczy, które należy wiedzieć o argumencie / reż.
Jeśli używasz tego w wierszu poleceń, usuń „%”.
Mam nadzieję że to pomoże.
źródło
% 1 odnosi się do pierwszego przekazanego argumentu i nie można go użyć w iteratorze.
Spróbuj tego:
źródło
Wypróbuj „HELP FOR” w cmd, aby uzyskać pełny przewodnik
To jest przewodnik dla poleceń XP. http://www.ss64.com/nt/
źródło
Aby iterować wszystkie pliki i foldery, których możesz użyć
Aby przejść do wszystkich folderów nie tylko z plikami, możesz użyć
Gdzie
/s
da wszystkie wyniki w drzewie katalogów na nieograniczonej głębokości. Możesz pominąć,/s
jeśli chcesz iterować zawartość tego folderu, a nie jego podfolderuWdrażanie wyszukiwania w iteracji
Aby wykonać iterację według określonych nazwanych plików i folderów , możesz wyszukać nazwę i iterować za pomocą pętli for
Aby wykonać iterację według określonych nazwanych folderów / katalogów, a nie plików , użyj
/AD
tego samego poleceniaźródło
Miałem problem z uzyskaniem odpowiedzi JOP z bezwzględną ścieżką, dopóki nie znalazłem tej referencji: https://ss64.com/nt/for_r.html
Poniższy przykład zapętla wszystkie pliki w katalogu podanym przez ścieżkę bezwzględną.
źródło
Poniższy kod tworzy plik o nazwie „AllFilesInCurrentDirectorylist.txt” w bieżącym katalogu, który zawiera listę wszystkich plików (tylko pliki) w bieżącym katalogu. Sprawdź to
źródło
Może również użyć polecenia forfiles :
a także sprawdź, czy jest to katalog
źródło
@isdir==true
musi być@isdir==TRUE
Użyłbym vbscript (Windows Scripting Host), ponieważ wsadowo jestem pewien, że nie możesz powiedzieć, że nazwa jest plikiem lub katalogiem.
W VBS może to być coś takiego:
Sprawdź FileSystemObject na MSDN .
źródło
Używam polecenia xcopy z opcją / L, aby uzyskać nazwy plików. Więc jeśli chcesz uzyskać katalog lub wszystkie pliki w podkatalogu, możesz zrobić coś takiego:
Po prostu używam c: \ jako miejsca docelowego, ponieważ zawsze istnieje w systemach Windows i nie kopiuje, więc nie ma znaczenia. jeśli chcesz też podkatalogów, po prostu użyj opcji / s na końcu. Możesz także użyć innych przełączników xcopy, jeśli potrzebujesz ich z innych powodów.
źródło
Spróbuj tego, aby sprawdzić, czy plik jest katalogiem:
To tylko powie ci, czy plik NIE jest katalogiem, co będzie również prawdą, jeśli plik nie istnieje, więc najpierw sprawdź, czy jest to konieczne. Kreski (^) służą do zmiany symboli przekierowania, a dane wyjściowe listy plików są przekierowywane do NUL, aby zapobiec ich wyświetleniu, podczas gdy dane wyjściowe błędów list DIR są przekierowywane do danych wyjściowych, dzięki czemu można przetestować komunikat DIR „Nie znaleziono pliku „.
źródło
Spróbuj tego:
zlicza pliki .msi i .exe w twoim katalogu (i podkatalogu). Czyni to także różnicę między folderami i plikami jako plikami wykonywalnymi.
Po prostu dodaj rozszerzenie (.pptx .docx ..), jeśli chcesz filtrować inne pliki w pętli
źródło
W moim przypadku musiałem usunąć wszystkie pliki i foldery poniżej folderu tymczasowego. Tak właśnie skończyłem. Musiałem uruchomić dwie pętle, jedną dla plików i jedną dla folderów. Jeśli pliki lub foldery mają spacje w swoich nazwach, musisz użyć „”
źródło
Oto moje komentarze z komentarzami w kodzie.
Po prostu poprawiam umiejętności biatch, więc wybaczam rażące błędy.
Próbowałem napisać rozwiązanie typu „wszystko w jednym” najlepiej jak potrafię, z niewielką modyfikacją tam, gdzie wymaga tego użytkownik.
Kilka ważnych uwag: Po prostu zmień zmienną
recursive
na,FALSE
jeśli chcesz przetwarzać tylko pliki i foldery katalogów głównych. W przeciwnym razie przejdzie przez wszystkie foldery i pliki.Zapraszamy C&C ...
źródło