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

问题描述

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],耗时:2136ms,状态:FINISHED

解决方法

[闪避交火]

现在 - 没那么快,伙计......

如所写,代码应该执行

(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 中的前导空格视为分隔符。

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...