如何使用for循环遍历目录中的每个文件?

我如何判断某个条目是一个目录还是一个文件?


当前回答

遍历您可以使用的所有文件和文件夹

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

其他回答

我会使用vbscript (Windows脚本主机),因为在批处理中,我确信你不能区分一个名称是一个文件还是一个目录。

在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

检查MSDN上的FileSystemObject。

for %1 in (*.*) do echo %1

在cmd中尝试“HELP FOR”以获得完整的指南

这是XP命令的指南。http://www.ss64.com/nt/

这个for循环将列出目录中的所有文件。

pushd somedir
for /f "delims=" %%f in ('dir /b /a-d-h-s') do echo %%f
popd

"delims="用于显示包含空格的长文件名....

'/b"只显示名称,不显示大小日期等。

关于dir's /a参数需要了解的一些事情。

使用“/a”会列出所有内容,包括隐藏属性和系统属性。 “/ad”只显示子目录,包括隐藏目录和系统目录。 "/a-d"参数消除带有'D'irectory属性的内容。 "/a-d-h-s"将显示所有内容,但包含'D'irectory, 'H'idden 'S'ystem属性的条目除外。

如果在命令行上使用此命令,请删除“%”。

希望这能有所帮助。

这将递归地列出当前目录及其子目录中的所有文件(仅是文件):

for /r %i in (*) do echo %i

此外,如果在批处理文件中运行该命令,则需要将%符号加倍。

for /r %%i in (*) do echo %%i

(感谢@agnul)

在我的情况下,我必须删除临时文件夹下的所有文件和文件夹。这就是我最后做这件事的原因。我必须运行两个循环一个文件和一个文件夹。如果文件或文件夹名称中有空格,则必须使用" "

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"
)