Как я могу перебрать каждый файл в каталоге, используя for
цикл?
И как я могу определить, является ли определенная запись каталогом или просто файлом?
windows
batch-file
for-loop
cmd
Vhaerun
источник
источник
Ответы:
Здесь перечислены все файлы (и только файлы) в текущем каталоге:
Также, если вы запускаете эту команду в пакетном файле, вам нужно удвоить знаки%.
(спасибо @agnul)
источник
for /r %i in (*) do ( echo %~nxi )
. Этот поток может быть действительно полезным: stackoverflow.com/questions/112055/… .Итерация по ...
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
К сожалению, я не нашел способа перебирать файлы и подкаталоги одновременно.
Просто используйте cygwin с его bash для большей функциональности.
Кроме этого: вы заметили, что справка по встроенной программе MS Windows - отличный ресурс для описания синтаксиса командной строки cmd?
Также посмотрите здесь: http://technet.microsoft.com/en-us/library/bb490890.aspx
источник
%file
и%subdir
может быть только один персонаж долго, то есть%f
,%s
.Для перебора каждого файла будет работать цикл for:
for %%f in (directory\path\*) do ( something_here )
В моем случае я также хотел, чтобы содержимое файла, имя и т. Д.
Это привело к нескольким проблемам, и я подумал, что мой вариант использования может помочь. Вот цикл, который читает информацию из каждого файла .txt в каталоге и позволяет вам что-то с ним делать (например, setx).
* Ограничение: val <= %% f получит только первую строку файла.
источник
Существует небольшая разница между запуском
FOR
из командной строки и из командного файла. В пакетном файле вам нужно поместить два%
символа перед каждой ссылкой на переменную.Из командной строки:
Из пакетного файла:
источник
Этот цикл for выведет список всех файлов в каталоге.
"delims =" полезен для отображения длинных имен файлов с пробелами в нем ....
'/ b "показывает только имена, а не даты размера и т. д.
Некоторые вещи, которые нужно знать о dir's / a аргумент.
Если вы используете это в командной строке, удалите «%».
Надеюсь это поможет.
источник
% 1 ссылается на первый переданный аргумент и не может использоваться в итераторе.
Попробуй это:
источник
Попробуйте "HELP FOR" в cmd для полного руководства
Это руководство для команд XP. http://www.ss64.com/nt/
источник
Для перебора всех файлов и папок вы можете использовать
Чтобы перебрать все папки только не с файлами, то вы можете использовать
Где
/s
будут давать все результаты по всему дереву каталогов в неограниченной глубине. Вы можете пропустить,/s
если вы хотите перебирать содержимое этой папки, а не их подпапкуРеализация поиска в итерации
Для перебора определенных именованных файлов и папок вы можете искать имя и перебирать, используя цикл for
Чтобы выполнить итерацию по определенным именованным папкам / каталогам, а не по файлам , используйте
/AD
ту же командуисточник
У меня были проблемы с получением ответа jop для работы с абсолютным путем, пока я не нашел эту ссылку: https://ss64.com/nt/for_r.html
В следующем примере циклически перебираются все файлы в каталоге, заданном абсолютным путем.
источник
Следующий код создает файл с именем «AllFilesInCurrentDirectorylist.txt» в текущем каталоге, который содержит список всех файлов (только файлы) в текущем каталоге. Проверьте это
источник
Он также может использовать команду forfiles :
а также проверьте, если это каталог
источник
@isdir==true
должно быть@isdir==TRUE
Я бы использовал vbscript (Windows Scripting Host), потому что в пакете я уверен, что вы не можете сказать, что имя является файлом или каталогом.
В VBS это может быть что-то вроде этого:
Проверьте FileSystemObject на MSDN .
источник
Я использую команду xcopy с параметром / L, чтобы получить имена файлов. Поэтому, если вы хотите получить каталог или все файлы в подкаталоге, вы можете сделать что-то вроде этого:
Я просто использую c: \ в качестве места назначения, потому что он всегда существует в системах Windows и не копирует, поэтому это не имеет значения. если вы хотите, чтобы подкаталоги тоже использовались, в конце используйте параметр / s. Вы также можете использовать другие ключи xcopy, если они вам нужны по другим причинам.
источник
Попробуйте это, чтобы проверить, является ли файл каталогом:
Это только скажет вам, является ли файл НЕ каталогом, что также будет истинно, если файл не существует, поэтому обязательно проверьте это сначала, если вам нужно. Символы вставки (^) используются для экранирования символов перенаправления, и вывод списка файлов перенаправляется в NUL, чтобы предотвратить его отображение, а вывод ошибок списка DIR перенаправляется на вывод, чтобы можно было проверить сообщение DIR «Файл не найден» ».
источник
попробуй это:
он считает файлы .msi и .exe в вашем каталоге (и в подкаталоге). Так что это также делает разницу между папками и файлами как исполняемыми файлами.
Просто добавьте расширение (.pptx .docx ..), если вам нужно отфильтровать другие файлы в цикле
источник
В моем случае мне пришлось удалить все файлы и папки под временной папкой. Так вот как я это сделал. Мне пришлось запустить два цикла, один для файла и один для папок. Если в именах файлов или папок есть пробелы, вы должны использовать ""
источник
Вот мой путь с комментариями в коде.
Я просто оттачиваю навыки владения велосипедом, так что прости любые грубые ошибки.
Я попытался написать все в одном решении как можно лучше с небольшой модификацией, где это требуется пользователю.
Некоторые важные замечания: Просто измените переменную
recursive
на,FALSE
если вы хотите, чтобы только обрабатывались файлы и папки корневых каталогов. В противном случае он проходит через все папки и файлы.C & C приветствуется ...
источник