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

Bri*_*ndy 255 windows loops cmd file batch-file

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

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

Fra*_*nov 338

命令行用法:

for /f %f in ('dir /b c:\') do echo %f
Run Code Online (Sandbox Code Playgroud)

批处理文件用法:

for /f %%f in ('dir /b c:\') do echo %%f
Run Code Online (Sandbox Code Playgroud)

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

for /f "delims=|" %%f in ('dir /b c:\') do echo %%f
Run Code Online (Sandbox Code Playgroud)

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

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

如果需要使用输出重定向或命令管道,请使用escape char(^):

for /f "usebackq delims=|" %%f in (`dir /b "c:\program files" ^| findstr /i microsoft`) do echo %%f
Run Code Online (Sandbox Code Playgroud)

  • `FOR`之后的`/ f`将其限制为文件.类似地,`/ d`限制到目录(文件夹),`/ r`指示它是递归的. (15认同)
  • 刚刚意识到你必须使用后引号...而不是''dir/b"c:\ program files"'`它应该是`\`dir/b"c:\ program files"\`` (4认同)
  • 至少对于某些命令,文件变量应该用双引号括起来. (3认同)
  • +1这是一个活生生的答案,不断得到关注; 非常感谢. (3认同)
  • 不错的工作。唯一的建议是在 %%f 周围添加引号,即```do echo "%%f`"``` 如果没有引号,则将尝试执行其中包含空格的命令。例如 ```start "hello world.bat" ``` 是一个有效的命令,但 ```start hello world.bat``` 则不是。 (2认同)

Pau*_*oux 101

或者,使用:

forfiles /s /m *.png /c "cmd /c echo @path"
Run Code Online (Sandbox Code Playgroud)

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


Gor*_*ell 62

最简单的方法:

从命令行,使用:

for %f in (*.*) do echo %f
Run Code Online (Sandbox Code Playgroud)

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

for %%f in (*.*) do echo %%f
Run Code Online (Sandbox Code Playgroud)

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

for %%f in (%1\*.*) do echo %%f
Run Code Online (Sandbox Code Playgroud)

  • 与用`for`评估`dir/B`输出相比,不仅最简单,而且更加优雅. (7认同)
  • 在%f之前添加一个/ r来递归子目录 (5认同)

mst*_*obl 33

使用

for /r path %%var in (*.*) do some_command %%var
Run Code Online (Sandbox Code Playgroud)

有:

  • 路径是起始路径.
  • %% var是一些标识符.
  • *.*是文件掩码或变量的内容.
  • some_command是使用path和var连接作为参数执行的命令.

  • 由于某些奇怪的原因,变量名称仅限于一个字符. (3认同)
  • 我收到错误消息:“ %% var目前是意外的。”您能举一个确切的例子吗?我尝试了一堆`for / r的变体。(*。*)中的%% var会回显%% var` (2认同)
  • 我们可以使用不同的表情来获得不同的结果吗? (2认同)

thi*_*not 6

其他方式:

for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi"
Run Code Online (Sandbox Code Playgroud)