使用" for"循环遍历目录中的所有文件
如何使用for
循环遍历目录中的每个文件?
我怎么知道某个条目是目录还是文件?
解决方案
在bash中,我们可能会执行以下操作:
for fn in *; do if [ -d $fn ]; then echo "$fn is a directory" fi if [ -f $fn ]; then echo "$fn is a file" fi done
我只是注意到我们询问了有关批处理的信息,我误读为bash。因此,此答案可能不适合问题。
for %1 in (*.*) do echo %1
尝试在cmd中进行"帮助"以获取完整指南
这是XP命令的指南。 http://www.ss64.com/nt/
%1引用传入的第一个参数,不能在迭代器中使用。
试试这个:
@echo off for %%i in (*.*) do echo %%i
这将列出当前目录中的所有文件(并且仅列出文件):
for /r %i in (*) do echo %i
同样,如果我们在批处理文件中运行该命令,则需要将%符号加倍。
for /r %%i in (*) do echo %%i
(感谢@agnul)
我将使用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。
遍历...
- ...当前目录中的文件:
(。\ *)中的%f执行@echo%f
- ...当前目录中的子目录:
对于(。\ *)中的/ D%s执行@echo%s
- ...当前和所有子目录中的文件:(./*中的/ R%f执行@echo%f`
- ...当前和所有子目录中的子目录:(./*中的/ R / D%s执行@echo%s`
不幸的是,我没有找到同时遍历文件和子目录的任何方法。
只需将cygwin及其bash用于更多功能即可。
除此之外:我们是否注意到,MS Windows的内置帮助是描述cmd命令行语法的好资源?
也可以在这里查看:http://technet.microsoft.com/zh-cn/library/bb490890.aspx
从命令行和批处理文件运行" FOR"之间有细微的差别。在批处理文件中,我们需要在每个变量引用的前面放置两个%
字符。
从命令行:
FOR %i IN (*) DO ECHO %i
从批处理文件中:
FOR %%i IN (*) DO ECHO %%i
此for循环将列出目录中的所有文件。
pushd somedir for /f "delims=" %%f in ('dir /b /a-d-h-s') do echo %%f popd
" delims ="可用于显示长文件名并带有空格...。
'/ b"仅显示名称,不显示日期大小等。
关于dir的/ 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