2016-07-07 94 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