Windows 子字符串操作中的延迟变量展开

Windows 子字符串操作中的延迟变量展开,windows,batch-file,cmd,delayedvariableexpansion,Windows,Batch File,Cmd,Delayedvariableexpansion,您使用的是文本字符串intLength,而不是%intLength%变量 由于要在for循环中初始化变量,因此必须使用!长度此变量名称的变体。不幸的是,由于您已经在使用感叹号从str中获取子字符串,因此您也不能在该行中使用感叹号来获取intLength的值,因为这样您就基本上拥有了一个变量!str:~,一个批处理确实不喜欢的不相关字符串,以及一个 您可以通过运行来解决此问题!长度通过另一个for循环,并改用%%var变量,因为您已经证明了这是可行的 SETLOCAL EnableDelayedE

您使用的是文本字符串
intLength
,而不是
%intLength%
变量

由于要在for循环中初始化变量,因此必须使用
!长度此变量名称的变体。不幸的是,由于您已经在使用感叹号从
str
中获取子字符串,因此您也不能在该行中使用感叹号来获取
intLength
的值,因为这样您就基本上拥有了一个变量
!str:~,一个批处理确实不喜欢的不相关字符串,以及一个

您可以通过运行
来解决此问题!长度
通过另一个for循环,并改用
%%var
变量,因为您已经证明了这是可行的

SETLOCAL EnableDelayedExpansion

SET str=123456789abcdefgh

FOR /l %%x IN (1, 1, 10) DO (

    SET /a intLength=10-%%x

    SET result=!str:~-%%x!
    ECHO "Works as intended: " !result!

    SET result=!str:~-intLength!
    ECHO "Does NOT work as intended: " !result!
)

endlocal

有关此类管理的完整规则,请参见;您只需要在描述中通过“子字符串”更改“数组元素”。。。
@echo off
setlocal EnableDelayedExpansion

set str=123456789abcdefgh

for /l %%x in (1, 1, 10) DO (

    set /a intLength=10-%%x

    SET result=!str:~-%%x!
    echo Works as intended: !result!

    for /f %%A in ("!intLength!") do SET result=!str:~-%%A!
    echo Now works as intended: !result!
    echo.
)

endlocal