如果在bat脚本中,即使设置了ENABLEDELAYEDEXPANSION,设置也不会用于+

时间:2016-07-07 12:38:55

标签: batch-file

我的剧本(a.bat):

SETLOCAL ENABLEDELAYEDEXPANSION

if "%1"=="on" (
    FOR /F "tokens=1" %%a in ('netsh interface show interface ^| findstr Local') DO (set lanst=%%a)
    set lanst=%lanst: =%
    echo Local Area Connection: %lanst%

    FOR /F "delims=: tokens=2" %%b in ('netsh wlan show interface ^| findstr SSID ^| findstr /v B') DO (set curwifi=%%b)
    set curwifi=%curwifi: =%
    echo Current Wifi: %curwifi%
)

当我在命令行中运行此脚本时,似乎该设置适用于+如果: if+for

但是当我删除if语句时,脚本是:

SETLOCAL ENABLEDELAYEDEXPANSION
echo %1

    FOR /F "tokens=1" %%a in ('netsh interface show interface ^| findstr Local') DO (set lanst=%%a)
    set lanst=%lanst: =%
    echo Local Area Connection: %lanst%

    FOR /F "delims=: tokens=2" %%b in ('netsh wlan show interface ^| findstr SSID ^| findstr /v B') DO (set curwifi=%%b)
    set curwifi=%curwifi: =%
    echo Current Wifi: %curwifi%

结果显示: only-for

根据输出,我发现,在if + for的情况下,似乎do()中的语句不会被执行。 为什么会这样,以及如何解决?

先谢谢!

1 个答案:

答案 0 :(得分:2)

尝试:

SETLOCAL ENABLEDELAYEDEXPANSION

if "%1"=="on" (
    FOR /F "tokens=1" %%a in ('netsh interface show interface ^| findstr Local') DO (
        set lanst=%%a
    )
    set lanst=!lanst: =!
    echo Local Area Connection: !lanst!

    FOR /F "delims=: tokens=2" %%b in ('netsh wlan show interface ^| findstr SSID ^| findstr /v B') DO (
        set curwifi=%%b
    )
    set curwifi=!curwifi: =!
    echo Current Wifi: !curwifi!
)

这里有关于delayed expansion

的更多信息