我试图在for循环中读取字符串的字符。
命令!字符串:~1,3!工作良好。但我可以用变量而不是1和3来做这个。我尝试了下面的代码,但我不知道出了什么问题。它不起作用。
@echo off
setlocal enableextensions enabledelayedexpansion
set string=abcdefghij
set /a count=1
for /l %%x in (1,1,3) do (
set string2=!string:~%count%,1!
set /a count+=1
echo !string2!
pause
)
但它始终将输出显示为:
b
我希望输出为:
b
c
d
请帮助解决这个问题。提前非常感谢
答案 0 :(得分:1)
为了达到你想要的效果,你需要做两次延迟扩展,就像这样:
set string2=!string:~!count!,1!
当然,上一行无效。虽然有几种方法可以解决这个问题,但大多数方法都使用call
命令很慢。要解决此问题,请以最快的方式运行,使用for
命令更改第一个!计数!扩展为FOR可替换参数,然后在原始表达式中使用它:
for %%i in (!count!) do set string2=!string:~%%i,1!
答案 1 :(得分:0)
问题是%count%
的扩展没有延迟,所以它对每个循环迭代都有相同的值。最好这样写:
@echo off
setlocal enableextensions enabledelayedexpansion
set string=abcdefghij
set /a count=1
for /l %%x in (%count%,1,3) do (
set string2=!string:~%%x,1!
echo !string2!
)
修改强>
如果您希望在设置变量时保持%count%
评估,而不是仅在for
循环的开头,请使用Aacini's answer。