Batch file 无法读取for循环中字符串的字符
我正在尝试读取for循环中字符串的字符 命令!弦:~1,3!很好。但是我可以用变量来代替1和3吗。我尝试了以下代码,但我不知道出了什么问题。它不起作用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
@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秒。