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

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


当前回答

它也可以使用forfiles命令:

forfiles /s 

还要检查它是否是一个目录

forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"

其他回答

这个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属性的条目除外。

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

希望这能有所帮助。

下面的代码在当前目录中创建一个名为“AllFilesInCurrentDirectorylist.txt”的文件,其中包含当前目录中所有文件(仅为文件)的列表。看看吧

dir /b /a-d > AllFilesInCurrentDirectorylist.txt

从命令行运行FOR和从批处理文件运行FOR之间有细微的区别。在批处理文件中,您需要在每个变量引用前放置两个%字符。

从命令行:

FOR %i IN (*) DO ECHO %i

从批处理文件:

FOR %%i IN (*) DO ECHO %%i

我使用xcopy命令和/L选项来获取文件名。所以如果你想获取一个目录或子目录下的所有文件,你可以这样做:

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

我只是使用c:\作为目标,因为它一直存在于windows系统中,而且它不会复制,所以没关系。如果你也想要子目录,只需在最后使用/s选项。如果出于其他原因需要xcopy的其他开关,也可以使用它们。

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

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

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

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

(感谢@agnul)