[英]Delayed variable expansion inside a substring operation
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
您正在使用文字字符串intLength
而不是%intLength%
變量。
由於要在for循環中初始化變量,因此必須使用!intLength!
此變量名稱的變體。 不幸的是,由於您已經在使用感嘆號從str
獲取子str
,因此您也不能在該行中使用它們來獲取intLength
的值,因為您實際上將擁有一個變量!str:~!
,一個批處理實際上不希望使用的無關字符串,以及!!
。
您可以通過運行!intLength!
來解決此!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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.