如何使用 for
循环遍历目录中的每个文件?
如何判断某个条目是一个目录还是一个文件?
如何使用 for
循环遍历目录中的每个文件?
如何判断某个条目是一个目录还是一个文件?
我使用xcopy命令并带有/L选项来获取文件名。因此,如果您想获取目录或子目录中的所有文件,可以像这样操作:
for /f "delims=" %%a IN ('xcopy "D:\*.pdf" c:\ /l') do echo %%a
我之所以选择 c:\ 作为目标路径,是因为它在 Windows 系统中总是存在,并且不需要复制,所以无关紧要。如果您还想复制子目录,请在末尾使用 /s 选项。如果您需要其他开关,也可以使用 xcopy 的其他开关。
forfiles /s
同时检查它是否是一个目录
forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"
@isdir==true
needs to be @isdir==TRUE
- psyklopzdir /b /a-d > AllFilesInCurrentDirectorylist.txt
尝试使用以下方法来测试文件是否是目录:
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的“文件未找到”消息进行测试。
试试这个:
::Example directory
set SetupDir=C:\Users
::Loop in the folder with "/r" to search in recursive folders, %%f being a loop ::variable
for /r "%SetupDir%" %%f in (*.msi *.exe) do set /a counter+=1
echo there are %counter% files in your folder
它会在您的目录(以及子目录)中计算.msi和.exe文件。因此,它也区分文件夹和可执行文件。
如果需要在循环中过滤其他文件,请添加扩展名(.pptx .docx ..)
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
在我这种情况下,我需要删除临时文件夹下的所有文件和文件夹。因此,我最终是这样做的。我必须运行两个循环,一个用于文件,一个用于文件夹。如果文件或文件夹名称中有空格,则必须使用“”。
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"
)