Синтаки для EnableDelayedExpansion во вложенных циклах for - PullRequest
0 голосов
/ 21 мая 2018

Если я упростил свое требование, я хочу получить последние две цифры этих строк, используя командный файл.Это не точное требование.но я сделал это простым для понимания.:)

 11-22-33
 11-22-44
 11-22-55
 11-22-66

ожидаемый результат -

33
44
55
66

Это код, который я написал

 @echo off
    SetLocal EnableDelayedExpansion

    REM Fill strings to a array
    set DIR_COUNT=0
    for %%x in ("11-22-33" "11-22-44" "11-22-55" "11-22-66") do (    
        set /A DIR_COUNT+=1
        set  CONTENT_DIR_NAME=%%~x
        set "DIR_LIST[!DIR_COUNT!]=!CONTENT_DIR_NAME!"
    )

    REM This part is working when I hard code the index of array to 1. I placed this two lines for testing purpose of above code.
    for %%a in (%DIR_LIST[1]:-= %) do set mfgName=%%a
    echo %mfgName%

    REM this loop doesn't work because the syntax not correct. 
    for /L %%i in (1,1,%DIR_COUNT%) do (    
        for %%a in (%!DIR_LIST[%%i]!:-= %) do (
            set mfgName=%%a
            echo !mfgName!
        )
    )

Поскольку мой синтаксис понимания (%!DIR_LIST[%%i]!:-= %) неверен.Любые идеи, как DelayedExpansion внутри DelayedExpansion и исправить этот синтаксис

1 Ответ

0 голосов
/ 21 мая 2018

Вот правильный синтаксис для вашего командного файла.

@echo off
SetLocal EnableDelayedExpansion

REM Fill strings to a array
set DIR_COUNT=0
for %%x in ("11-22-33" "11-22-44" "11-22-55" "11-22-66") do (    
    set /A DIR_COUNT+=1
    set CONTENT_DIR_NAME=%%~x
    set "DIR_LIST[!DIR_COUNT!]=!CONTENT_DIR_NAME!"
)

for /L %%i in (1,1,%DIR_COUNT%) do (    
    for %%a in (!DIR_LIST[%%i]:-^= !) do (
        set mfgName=%%a
        echo !mfgName!
    )
)
pause
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...