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
问问题
53 次
1 回答
3
您使用的是文字字符串intLength
而不是%intLength%
变量。
由于您在 for 循环中初始化变量,因此您将不得不使用!intLength!
此变量名称的变体。不幸的是,由于您已经使用感叹号从 中获取子字符串str
,因此您也不能在该行中使用它们来获取 的值intLength
,因为您实际上将拥有一个变量!str:~!
,一个不相关的字符串,批次确实不是' t会喜欢,和!!
。
您可以通过运行!intLength!
另一个 for 循环并改用该%%var
变量来解决此问题,因为您已经证明它有效。
@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
于 2015-08-09T21:53:13.877 回答