如何使用 .bat 或 .cmd 文件遍历目录中的每个文件?
为简单起见,请提供一个仅回显文件名或文件路径的答案。
命令行用法:
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:(比原始答案快一年半 :-))如果目录名称本身的名称中有空格,您可以使用 for
上的 usebackq
选项:
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
或者,使用:
forfiles /s /m *.png /c "cmd /c echo @path"
forfiles 命令在 Windows Vista 及更高版本中可用。
最简单的方法:
从命令行,使用:
for %f in (*.*) do echo %f
从批处理文件(加倍 % 百分号):
for %%f in (*.*) do echo %%f
从将文件夹指定为第一个参数的批处理文件中:
for %%f in (%1\*.*) do echo %%f
for
评估 dir /B
输出相比,不仅最简单,而且更加优雅。
利用
for /r path %%var in (*.*) do some_command %%var
和:
path 是起始路径。
%%var 是一些标识符。
*.* 是文件掩码或变量的内容。
some_command 是使用路径和 var 连接作为参数执行的命令。
%%var was unexpected at this time.
你能举一个确切的例子吗?我尝试了 for /r . %%var in (*.*) do echo %%var
的一系列变体
另一种方式:
for %f in (*.mp4) do call ffmpeg -i "%~f" -vcodec copy -acodec copy "%~nf.avi"
"%~nf"
代表不带扩展名的文件名,其中 f
是 for
部分中指定的变量的名称。文档:docs.microsoft.com/en-us/previous-versions/windows/it-pro/…
我有一些恶意软件将目录中的所有文件标记为隐藏/系统/只读。如果其他人发现自己处于这种情况,请 cd 进入目录并运行 for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f
。
ATTRIB -S -H -R /S /D *.*
(/S 处理子目录中的文件,/D 也处理文件夹)
for
之后需要/f
?根据帮助文档,/f
标志打开并读取每个文件。需要回显或重命名文件吗?FOR
之后的/f
将其限制为文件。同样,/d
限制为目录(文件夹),/r
指示它是递归的。'dir /b "c:\program files"'
它应该是`dir /b "c:\program files"`