Windows 批处理: 在 FOR 循环中调用多个命令?

在 Windows 批处理文件中,是否可能在 单身 FOR循环中调用多个命令?例如,我想打印文件名,然后删除它:

@ECHO OFF
FOR /r %%X IN (*.txt) DO (ECHO %%X DEL %%X)
REM the line above is invalid syntax.

我知道在这种情况下,我可以通过执行两个不同的 FOR 循环来解决这个问题: 一个用于显示名称,一个用于删除文件,但是是否可能只在一个循环中执行此操作?

225958 次浏览
FOR /r %%X IN (*) DO (ECHO %%X & DEL %%X)

对于简短的命令,使用 &是可以的,但是这一行可以变得非常长、非常快。当这种情况发生时,切换到多行语法。

FOR /r %%X IN (*.txt) DO (
ECHO %%X
DEL %%X
)

放置 ()事项。DO之后的圆括号必须放在同一行上,否则批处理文件将不正确。

详情请参阅 if /?|find /V ""

SilverSkin 和 Anders 都是对的。可以使用括号执行多个命令。但是,必须确保命令本身(及其参数)不包含括号。cmd贪婪地搜索第一个闭括号,而不是优雅地处理嵌套的括号集。这可能导致命令行的其余部分无法解析,或者导致一些括号被传递给命令(例如 DEL myfile.txt))。

解决这个问题的方法是将循环体分割成一个单独的函数。请注意,您可能需要在函数体上跳来跳去,以避免“掉进”函数体。

FOR /r %%X IN (*.txt) DO CALL :loopbody %%X
REM Don't "fall through" to :loopbody.
GOTO :EOF


:loopbody
ECHO %1
DEL %1
GOTO :EOF