子串操作中的延迟变量扩展

时间:2015-08-09 21:29:27

标签: windows batch-file cmd delayedvariableexpansion

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

1 个答案:

答案 0 :(得分:3)

您正在使用文字字符串intLength而不是%intLength%变量。

由于您正在for循环中初始化变量,因此您必须使用此变量名称的!intLength!变体。不幸的是,由于您已经使用感叹号来获取str的子字符串,因此您无法在该行中使用感知点来获取intLength的值,因为您&#39 ; d然后基本上有一个变量!str:~!,一个不相关的字符串,

}。

您可以通过另一个for循环运行!!并使用!intLength!变量来解决这个问题,因为您已经证明了这一点。

%%var