如何使用for循环遍历目录中的每个文件?
我如何判断某个条目是一个目录还是一个文件?
如何使用for循环遍历目录中的每个文件?
我如何判断某个条目是一个目录还是一个文件?
当前回答
试试这个测试文件是否是目录:
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的消息“file Not Found”。
其他回答
遍历…
...当前目录下的文件:for %f in (.\*) do @echo %f ...subdirs in current dir: for /D %s in (.\*) do @echo %s .../R %f在(.\*)做@echo %f .../R /D %s in (.\*) do @echo %s
不幸的是,我没有找到同时遍历文件和子dirs的任何方法。
只需使用cygwin及其bash即可获得更多功能。
除此之外:你有没有注意到,MS Windows的内置帮助是描述cmd命令行的语法的一个很好的资源?
也可以在这里看看:http://technet.microsoft.com/en-us/library/bb490890.aspx
我很难让jop的答案与绝对路径一起工作,直到我发现这个参考:https://ss64.com/nt/for_r.html
下面的示例循环遍历一个由绝对路径给出的目录中的所有文件。
For /R C:\absoulte\path\ %%G IN (*.*) do (
Echo %%G
)
遍历您可以使用的所有文件和文件夹
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
从命令行运行FOR和从批处理文件运行FOR之间有细微的区别。在批处理文件中,您需要在每个变量引用前放置两个%字符。
从命令行:
FOR %i IN (*) DO ECHO %i
从批处理文件:
FOR %%i IN (*) DO ECHO %%i
它也可以使用forfiles命令:
forfiles /s
还要检查它是否是一个目录
forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"