0

我试图在 for 循环中读取字符串的字符。

命令 !string:~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

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

4

2 回答 2

1

为了达到你想要的,你需要做一个延迟扩展两次,也就是这样的:

set string2=!string:~!count!,1!

当然,上一行是无效的。虽然有几种方法可以解决这个问题,但大多数都使用call速度较慢的命令。要解决此问题,使其以最快的方式运行,请使用for命令更改第一个!count!展开成 FOR 可替换参数,然后在原始表达式中使用它:

for %%i in (!count!) do set string2=!string:~%%i,1!
于 2013-04-08T18:08:26.260 回答
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

于 2013-04-08T17:31:08.010 回答