目标:
我有一个批处理程序,我希望 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 . . .
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
的要点)
{未经测试}