如何使用批处理脚本对目录中的每个文件执行操作


Answers:


348

命令行用法:

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

3
至少对于某些命令,文件变量应用双引号引起来。
Jirka,

1
为什么/f需要之后for?根据帮助文档,该/f标志将打开并读取每个文件。是否需要回显或重命名文件?
Snekse 2012年

17
/f之后FOR它限制了文件。同样,/d限制目录(文件夹)并/r指示它是递归的。

3
+1这是一个生动的答案,不断得到关注;非常感谢。
Sabuncu 2014年

4
刚刚意识到您必须使用反引号...而不是'dir /b "c:\program files"'应该使用`dir /b "c:\program files"`
endavid '16

101

或者,使用:

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

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


1
在第二个cmd shell中使用带有空格的路径非常困难。最后,我调整了%PATH%env var来完成工作。但是,谢谢。有用的
twobob

70

最简单的方法:

在命令行中,使用:

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

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

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

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

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

8
与使用评估dir /B输出相比,它不仅最简单,而且也更加优雅for
syneticon-dj 2014年

5
在%f之前添加/ r以递归子目录
PRMan

35

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

与:

  • path是起始路径。
  • %% var是一些标识符。
  • *。*是文件掩码或变量的内容。
  • some_command是将路径和var串联为参数执行的命令。

2
我收到错误消息:%%var was unexpected at this time.您能举一个确切的例子吗?我尝试了一系列的for /r . %%var in (*.*) do echo %%var
hippietrail,2012年

3
由于某些奇怪的原因,变量名被限制为一个字符。
ollb 2012年

2
我们可以使用不同的笑脸来获得不同的结果吗?
2014年


-1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.