289

如何使用 .bat 或 .cmd 文件遍历目录中的每个文件?

为简单起见,请提供一个仅回显文件名或文件路径的答案。

4

6 回答 6

372

命令行用法:

for /f %f in ('dir /b c:\') do echo %f

批处理文件使用:

for /f %%f in ('dir /b c:\') do echo %%f

更新:如果目录包含名称中带有空格的文件,则需要更改for /f命令使用的分隔符。例如,您可以使用管道字符。

for /f "delims=|" %%f in ('dir /b c:\') do echo %%f

更新 2 :(在原始答案之后一年半:-)) 如果目录名称本身的名称中有空格,则可以使用以下usebackq选项for

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files"`) do echo %%f

如果您需要使用输出重定向或命令管道,请使用转义字符 ( ^):

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f
于 2008-10-07T22:51:57.213 回答
128

或者,使用:

forfiles /s /m *.png /c "cmd /c echo @path"

forfiles 命令在 Windows Vista 及更高版本中可用。

于 2012-10-18T23:22:13.993 回答
82

最简单的方法:

从命令行,使用:

for %f in (*.*) do echo %f

从批处理文件(加倍 % 百分号):

for %%f in (*.*) do echo %%f

从将文件夹指定为第一个参数的批处理文件中:

for %%f in (%1\*.*) do echo %%f
于 2013-11-08T00:16:32.640 回答
37

采用

for /r path %%var in (*.*) do some_command %%var

和:

  • path 是起始路径。
  • %%var 是一些标识符。
  • *.* 是文件掩码或变量的内容。
  • some_command 是使用路径和 var 连接作为参数执行的命令。
于 2008-10-07T22:56:57.483 回答
8

其他方式:

for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi"
于 2016-04-17T23:44:05.960 回答
0

我有一些恶意软件将目录中的所有文件标记为隐藏/系统/只读。如果其他人发现自己处于这种情况,请 cd 进入目录并运行for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f.

于 2013-05-14T21:30:20.200 回答