簡體   English   中英

子字符串操作中的延遲變量擴展

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM