首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Windows批处理:在FOR循环中调用多个命令?

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

Stack Overflow用户
提问于 2010-02-12 23:46:49
回答 3查看 210.9K关注 0票数 135

在Windows批处理文件中,是否可以在单个 FOR循环中调用多个命令?比方说,我想打印文件名,并在删除它之后:

代码语言:javascript
复制
@ECHO OFF
FOR /r %%X IN (*.txt) DO (ECHO %%X DEL %%X)
REM the line above is invalid syntax.

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-12 23:52:17

代码语言:javascript
复制
FOR /r %%X IN (*) DO (ECHO %%X & DEL %%X)
票数 127
EN

Stack Overflow用户

发布于 2010-02-14 01:56:55

使用&可以很好地处理短命令,但这一行很快就会变得很长。当发生这种情况时,切换到多行语法。

代码语言:javascript
复制
FOR /r %%X IN (*.txt) DO (
    ECHO %%X
    DEL %%X
)

()的位置很重要。DO后面的圆括号必须放在同一行,否则批处理文件会有误。

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

票数 215
EN

Stack Overflow用户

发布于 2010-02-14 02:51:10

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

解决此问题的一种方法是将循环体拆分为一个单独的函数。请注意,您可能需要跳过函数体,以避免“跌入”其中。

代码语言:javascript
复制
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
票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2252979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档