Windows Batch For 循环未按预期重复

问题描述 投票:0回答:1

目标:
我有一个批处理程序,我希望 for 循环通过分隔符分割字符串,因此在每次迭代中都会分割并打印出子字符串。

问题:
然而,我发现 for 循环并没有按预期重复,而只是执行一次,尽管变量

my_str
确实正确地改变了它的值。

那么问题产生的原因是什么?

PS: 仅供参考,

my_str
变量中的子字符串数量未知,因此我没有在 for 循环中使用
token
选项。

我的批处理程序:

@echo off
setlocal enabledelayedexpansion

set "my_delim=`"
set "my_str=I am A`I am B`I am C`"

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 ------------------------------------
)
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
------------------------------------
exited loop
Press any key to continue . . . 

预期结果:

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 . . . 
for-loop batch-file
1个回答
0
投票
set "my_str=I am A`I am B`I am C`"

:again    
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 ------------------------------------
)
if defined my_str goto again

应该可以解决你的问题(但你错过了

for
的要点)

{未经测试}

© www.soinside.com 2019 - 2024. All rights reserved.