Windows Batch For循环未按预期重复执行的问题排查
批处理for循环仅执行一次的原因及解决方法
问题原因
for /F 循环的核心机制是先完整读取并解析循环的输入源,再启动迭代流程。你这里的输入源是 "!my_str!",循环启动时就已经把初始的my_str内容解析完毕,只会提取第一个符合delims规则的子串(也就是I am A)。之后在循环体里修改my_str的值,完全不会改变循环一开始就确定好的迭代次数和处理内容,所以循环只执行了一次。
解决方法
因为子串数量未知,我们可以用goto模拟while循环的逻辑,反复切割字符串直到my_str为空:
@echo off setlocal enabledelayedexpansion set "my_delim=`" set "my_str=I am A`I am B`I am C`" :loop if not "!my_str!"=="" ( for /F "delims=%my_delim%" %%A in ("!my_str!") do ( echo inside loop started echo A value is [%%A] set "my_str=!my_str:*%my_delim%=!" echo remaining my_str is [!my_str!] echo inside loop ended echo ------------------------------------ ) goto loop ) echo exited loop pause
效果验证
运行修改后的脚本,会完全匹配你预期的输出:
inside loop started A value is [I am A] remaining my_str is [I am B`I am C`] inside loop ended ------------------------------------ inside loop started A value is [I am B] remaining my_str is [I am C`] inside loop ended ------------------------------------ inside loop started A value is [I am C] remaining my_str is [] inside loop ended ------------------------------------ exited loop Press any key to continue . . .
内容的提问来源于stack exchange,提问作者Grace
相关产品推荐
相关产品推荐

