Windows批处理:在FOR循环中调用多个命令?
在Windowsbatch file中可以在单个 FOR
循环中调用多个命令吗? 比方说,我想打印文件名,删除后:
@ECHO OFF FOR /r %%X IN (*.txt) DO (ECHO %%X DEL %%X) REM the line above is invalid syntax.
我知道在这种情况下,我可以通过做两个不同的FOR循环来解决它:一个用于显示名称,另一个用于删除文件,但是可以在一个循环中完成吗?
FOR /r %%X IN (*) DO (ECHO %%X & DEL %%X)
对于短命令使用&
很好,但是这一行很快就会变得很长。 发生这种情况时,请切换到多行语法。
FOR /r %%X IN (*.txt) DO ( ECHO %%X DEL %%X )
(
和)
事项的安置。 DO
后的圆括号必须放在同一行,否则batch file将不正确。
有关详细信息,请参阅if /?|find /V ""
。
SilverSkin和Anders都是正确的。 您可以使用括号来执行多个命令。 但是,您必须确保命令本身(及其参数)不包含括号。 cmd
贪婪地search第一个右括号,而不是正确地处理嵌套括号。 这可能会导致命令行的其余部分无法parsing,或者可能导致一些括号传递给命令(例如, 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