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

Batch file 无法读取for循环中字符串的字符,batch-file,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

我正在尝试读取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

请帮忙解决这个问题。。提前感谢您

问题在于,
%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!
)
set string2=!string:~!count!,1!

编辑


如果要在设置变量时保持对
%count%
的求值,而不仅仅是在
for
循环的
开始时,请使用。

为了实现所需,您需要执行两次延迟扩展,即类似以下操作:

@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!
)
set string2=!string:~!count!,1!
当然,前一行是无效的。虽然有几种方法可以解决这个问题,但大多数方法都使用速度较慢的
call
命令。要解决此问题,使其以最快的方式运行,请使用
for
命令更改第一个!计数展开为可替换参数,然后在原始表达式中使用它:

for %%i in (!count!) do set string2=!string:~%%i,1!

如果你问了一个问题,但没有得到太多的关注,不要再问了。(来自同一用户的复制):但是有没有办法扩展%count%?有可能吗?请explain@RaathanaRanganath-见阿奇尼的答案。+1我喜欢这个。它比调用
更干净。您的方法和
调用之间的时间差也是正确的。我刚刚制作了一个从1循环到1000的测试脚本,使用
for
或者
call
设置
%count%
方法的
耗时331ms。
调用
方法耗时1.195秒。