【发布时间】:2010-09-15 21:29:47
【问题描述】:
如何使用 .bat 或 .cmd 文件遍历目录中的每个文件?
为简单起见,请提供一个仅回显文件名或文件路径的答案。
【问题讨论】:
标签: windows file loops batch-file cmd
如何使用 .bat 或 .cmd 文件遍历目录中的每个文件?
为简单起见,请提供一个仅回显文件名或文件路径的答案。
【问题讨论】:
标签: windows file loops batch-file 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:(比原来的答案快一年半了 :-))如果目录名称本身的名称中有空格,则可以使用 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
【讨论】:
/f 需要在for 之后?根据帮助文档,/f 标志打开并读取每个文件。需要回显或重命名文件吗?
/f 在FOR 之后将其限制为文件。同样,/d 限制为目录(文件夹),/r 指示它是递归的。
'dir /b "c:\program files"',它应该是`dir /b "c:\program files"`
使用
for /r path %%var in (*.*) do some_command %%var
与:
【讨论】:
%%var was unexpected at this time. 你能举个确切的例子吗?我尝试了for /r . %%var in (*.*) do echo %%var 的一系列变体
或者,使用:
forfiles /s /m *.png /c "cmd /c echo @path"
forfiles 命令在 Windows Vista 及更高版本中可用。
【讨论】:
我有一些恶意软件将目录中的所有文件标记为隐藏/系统/只读。如果其他人发现自己处于这种情况,请 cd 进入目录并运行 for /f "delims=|" %f in ('forfiles') do attrib -s -h -r %f。
【讨论】:
ATTRIB -S -H -R /S /D *.*(/S 处理子目录中的文件,/D 也处理文件夹)
最简单的方法:
从命令行,使用:
for %f in (*.*) do echo %f
来自批处理文件(将 % 百分号加倍):
for %%f in (*.*) do echo %%f
从一个将文件夹指定为第一个参数的批处理文件:
for %%f in (%1\*.*) do echo %%f
【讨论】:
for 评估dir /B 输出相比,不仅最简单,而且更加优雅。
另一种方式:
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/…