使用" for"循环遍历目录中的所有文件

时间:2020-03-06 14:46:29  来源:igfitidea点击:

如何使用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