我们可以在批处理脚本的 for 循环中使用 IF 条件吗?

Posted

技术标签:

【中文标题】我们可以在批处理脚本的 for 循环中使用 IF 条件吗?【英文标题】:Can we use IF condition inside the for loop in batch scripting? 【发布时间】:2021-04-21 20:00:42 【问题描述】:
set STR1= FINISHED

for /f "tokens=4,* delims=:" %a in (filename.txt) do (if %b == %STR1% (echo "SUCCESS") else (echo %b))

我正在使用上面的代码,但无法循环,它只是在做 echo %b。

文件名.txt:

12:38:32,249 INFO [SoapUIRunner] 完成运行 SoapUI 测试用例 [Couple Order],耗时:14124ms,状态:FAILED

12:38:34,441 INFO [SoapUIRunner] 已完成运行 SoapUI 测试用例 [Ping],耗时:2136 毫秒,状态:已完成

【问题讨论】:

【参考方案1】:

[闪避交火]

现在 - 不要那么快,parders....

如所写,代码应该执行

(if  FINISHED == FINISHED (echo "SUCCESS" )  else (echo  FINISHED ) )

但报告

 FINISHED

现在粗心的人会认为它的行为不符合逻辑 - 但令人难以置信的是,它确实如此。

关键是使用令牌流if%b==FINISHED进行比较。 %str1% 中的前导空格被解析器吃掉,因为它是一个可选的分隔符。然后处理正确地判断%b 的内容与FINISHED 不同,因为%b 包含一个前导空格。

治愈发布的代码:

for /f "tokens=4,* delims=:" %a in (filename.txt) do (if "%b" == "%STR1%" (echo "SUCCESS") else (echo %b))

引号告诉cmd 不要将str1 中的前导空格视为分隔符。

当然,如果这是一个批处理文件中的一行,因为它应该是为了克服永久重新键入问题,那么元变量应该确实将它们的 %s 加倍。

提示:使用set "var1=data" 设置值 - 这可以避免尾随空格引起的问题。在比较中,使用if "thing1" == "thing2" ... 可以避免thing1/2 中的空格引起的问题。

【讨论】:

以上是关于我们可以在批处理脚本的 for 循环中使用 IF 条件吗?的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本-循环语句

bash脚本中 if 语句 和 for 语句的用法

Shell脚本应用

在 for 循环中嵌套 if

修改 for 循环以不在批处理脚本中使用延迟扩展

浅谈Shell脚本中for循环while循环及case分支语句