无法在for循环中读取字符串的字符

时间:2013-04-08 17:11:59

标签: batch-file

我试图在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

请帮助解决这个问题。提前非常感谢

2 个答案:

答案 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