如何在批处理文件中使用for循环列出文件夹中所有文件和目录的名称

How to list the names of all the files and directories in a folder using for loop in a batch file

我想在批处理脚本中使用 for 循环列出目录中的所有文件和目录。我该怎么做?

我在下面使用但没有用:

for /r %%I in (".") do ( ls -ltr '%%I') ## Listing only filenames and not directories name

任何帮助都是可观的。

谢谢!

创建两个循环,一个用于文件

for /r %%i in (*.*) do <something>

还有一个用于目录

for /r %%i in (.) do <something>

并在 do

之后使用相同的命令

但是,既然你已经安装了 Cygwin,为什么不使用那个强大的功能呢

find . | xargs -L1 ls -ltr

其中 find . 找到所有文件和目录,| xargs 将输出传递给 xargs-L1 在每一行之后拆分输出并将每一行传递给 ls -ltr.

如果你只想要一个目录和文件列表,递归地,怎么样:

dir /b/s "."

如果你想对每个流项目做一些特殊的事情,使用 for 循环,你可以这样做:

for /f "tokens=* delims=" %%i in ('dir /b/s "."') do ( echo "%%i" )

这里我用了echo来回显,不过你可以随便放。

“在批处理脚本中使用 for 循环列出目录内的所有文件和目录。”你应该使用 DIR 命令。

如果您打开命令提示符 window,键入 dir /? 并按 ENTER 键,您应该会看到它的使用信息。

需要注意的一件重要事情是 /A 选项。没有特别提到的是单独使用,(不带附加参数D,R,H,A,S, ILO),启用所有属性。

因此,要以裸格式递归列出当前目录中的所有项目,您将使用:

DIR /A /B /S

DIR . /A /B /S

如果您想将它们列在相对于当前目录的特定位置,您可以使用:

DIR "Location" /A /B /S

或:

DIR ".\Location" /A /B /S

并且对于特定的绝对路径:

DIR "L:\ocation" /A /B /S

如果您希望它与批处理文件本身位于同一位置,您可以使用当前脚本的特殊变量 %0:

DIR "%~dp0." /A /B /S

要在 For 循环中执行该命令,您应该首先打开命令提示符 window,键入 for /? 并按 ENTER 键,阅读其使用信息。

你应该注意你是运行一个命令,因此应该使用FOR /F循环,即

FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

但还应注意:

To use the FOR command in a batch program, specify %%variable instead of %variable.

所以:

FOR /F ["options"] %%variable IN ('command') DO command [command-parameters]

由于您已经有了命令,因此选项现在变得很重要。您首先需要了解的是 eol ,虽然它似乎意味着行尾,但仅针对一端,即开头!如果它以单个特定字符开头,它不会将 'command' 的任何结果传递给 DOeol 的默认值是分号 ;(可能是因为历史上它是许多文件中的公共行注释标记)。通常,文件名或目录名可以包含分号,并以分号开头,所以为了包含所有文件,你会指定一个不能包含在文件名中的字符,对我来说最简单的是 ?,虽然我我见过很多使用 | 的例子。但是,当您执行递归 DIR 命令时,每个返回的行都是一个完全限定的路径,其中 none 可以以分号开头,因此您可以为此任务忽略 eol。您显然希望返回所有内容,因此不需要 skip 返回任何行。 tokensdelimiters 是根据您要对结果执行的操作进行调整的,在这种情况下,您希望 'command' 返回的每一行的全部内容没有特定的拆分人物。您应该注意 tokens 默认情况下是 1delims 默认情况下是 space 和水平制表符。因此,您应该规定不需要任何定界符,以便第一个标记是 'command' 每一行返回的所有内容。您很少需要 usebackq 选项,因此出于此答案和您的任务的目的,请忽略它。

现在把它们放在一起:

FOR /F "delims=" %%G IN ('DIR "Location" /A /B /S') DO command

最后,您可以对括号中的 DIR 命令的每个结果使用您想要的 DO 命令。该结果将保存在您的变量 %%G.

为了仅查看每个结果,我们将使用 ECHO 命令,(您只需将其替换为您选择的命令)。请注意,由于 DIR 命令的每个结果都是一个文件或目录名称字符串,因此您通常应该将其用双引号引起来。

allObjects.cmd

FOR /F "delims=" %%G IN ('DIR "Location" /A /B /S') DO ECHO "%%G"

请记住根据需要替换 "Location",在 运行 Windows 命令脚本

之前