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
答案 0 :(得分:3)
您正在使用文字字符串intLength
而不是%intLength%
变量。
由于您正在for循环中初始化变量,因此您必须使用此变量名称的!intLength!
变体。不幸的是,由于您已经使用感叹号来获取str
的子字符串,因此您无法在该行中使用感知点来获取intLength
的值,因为您&#39 ; d然后基本上有一个变量!str:~!
,一个不相关的字符串,
您可以通过另一个for循环运行!!
并使用!intLength!
变量来解决这个问题,因为您已经证明了这一点。
%%var