Переберите все файлы в каталоге, используя цикл for - PullRequest
303 голосов
/ 26 сентября 2008

Как я могу перебрать каждый файл в каталоге, используя цикл for?

А как я могу определить, является ли определенная запись каталогом или это просто файл?

Ответы [ 15 ]

2 голосов
/ 29 декабря 2012

Я использую команду xcopy с параметром / L, чтобы получить имена файлов. Поэтому, если вы хотите получить каталог или все файлы в подкаталоге, вы можете сделать что-то вроде этого:

for /f "delims=" %%a IN ('xcopy "D:\*.pdf" c:\ /l') do echo %%a

Я просто использую c: \ в качестве места назначения, потому что он всегда существует в системах Windows и не копирует, поэтому это не имеет значения. если вы хотите, чтобы подкаталоги тоже использовались, в конце используйте параметр / s. Вы также можете использовать другие ключи xcopy, если они вам нужны по другим причинам.

2 голосов
/ 04 января 2011

Попробуйте проверить, является ли файл каталогом:

FOR /F "delims=" %I IN ('DIR /B /AD "filename" 2^>^&1 ^>NUL') DO IF "%I" == "File Not Found" ECHO Not a directory

Это только скажет вам, является ли файл НЕ каталогом, что также будет истинно, если файл не существует, поэтому обязательно проверьте это сначала, если вам нужно. Символы вставки (^) используются для экранирования символов перенаправления, и вывод списка файлов перенаправляется в NUL, чтобы предотвратить его отображение, а вывод ошибок списка DIR перенаправляется на выход, чтобы можно было проверить сообщение DIR «Файл не найден» ».

2 голосов
/ 26 сентября 2008

Я бы использовал vbscript (Windows Scripting Host), потому что в пакете я уверен, что вы не можете сказать, что имя является файлом или каталогом.

В VBS это может быть что-то вроде этого:

Dim fileSystemObject
Set fileSystemObject = CreateObject("Scripting.FileSystemObject")

Dim mainFolder
Set mainFolder = fileSystemObject.GetFolder(myFolder)

Dim files
Set files = mainFolder.Files

For Each file in files
...
Next

Dim subFolders
Set subFolders = mainFolder.SubFolders

For Each folder in subFolders
...
Next

Проверка FileSystemObject на MSDN .

1 голос
/ 28 февраля 2019

К итерации по всем файлам и папкам , которые вы можете использовать

for /F "delims=" %%a in ('dir /b /s') do echo %%a

Чтобы перебирать только все папки без файлов, тогда вы можете использовать

for /F "delims=" %%a in ('dir /a:d /b /s') do echo %%a

Где /s выдаст все результаты по всему дереву каталогов с неограниченной глубиной. Вы можете пропустить /s, если хотите перебрать содержимое этой папки, а не их подпапку

Реализация поиска в итерации

Чтобы перебирать определенные именованные файлы и папки вы можете искать имя и перебирать, используя цикл for

for /F "delims=" %%a in ('dir "file or folder name" /b /s') do echo %%a

Чтобы перебрать определенные именованные папки / каталоги, а не файлы , затем использовать /AD в той же команде

for /F "delims=" %%a in ('dir "folder name" /b /AD /s') do echo %%a
1 голос
/ 26 сентября 2018

В моем случае мне пришлось удалить все файлы и папки, находящиеся под временной папкой. Так вот как я это сделал. Мне пришлось запустить два цикла, один для файла и один для папок. Если в именах файлов или папок есть пробелы, вы должны использовать ""

cd %USERPROFILE%\AppData\Local\Temp\
rem files only
for /r %%a in (*) do (
echo deleting file "%%a" ...
if exist "%%a" del /s /q "%%a"
)
rem folders only
for /D %%a in (*) do (
echo deleting folder "%%a" ...
if exist "%%a" rmdir /s /q "%%a"
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...