2016-07-07 66 views
2

我的腳本(a.bat):集不一樣,如果蝙蝠腳本+工作中,即使設置ENABLEDELAYEDEXPANSION

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()中的語句似乎不會執行。 這是爲什麼,以及如何解決?

感謝先進!

+0

延遲擴展是必要的情況下一個變量被修改,並且在代碼parenthesised塊閱讀更多相關資訊; 'if'語句構造了這樣一個塊,所以你需要使用'!lanst!'而不是'%lanst%'。 – aschipfl

+0

正確!謝謝! – Marslo

回答

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

+1

爲了突出這裏的細微差別,使用ENABLEDELAYEDEXPANSION時,使用'!'而不是'%'來獲取變量的延遲展開值。 –

+0

哦,是的!你是對的!!非常感謝! – Marslo