2011-02-17 63 views
2

我被一個愚蠢而簡單的問題困擾着瘋狂,這個問題耗盡了我的時間。我只想追加由逗號分隔的字符串,但逗號不會被追加。下面是我的批處理文件片段:無法連接以逗號分隔的字符串

set MissingParams= 
set SwitchURL= 
set TrustStore= 
if 0%SwitchURL%==0 (set MissingParams=SwitchURL) 
    if 0%TrustStore%==0 (
    if not 0%MissingParams%==0 (  
     set MissingParams=%MissingParams%, 
    ) 
     set MissingParams=%MissingParams%TrustStore 
) 

飛奔這個劇本後,當我回聲%MisingParams%,預期值是SwitchURL,TrustStore但它只是簡單地打印

SwitchURLTrustStore

D:\deleteme>echo %MissingParams% 
SwitchURLTrustStore 

對於調試,當我介紹在批處理文件中的一些echo語句,結果是更加的bizzare:

set MissingParams= 
if 0%SwitchURL%==0 (set MissingParams=SwitchURL) 
    if 0%TrustStore%==0 (
    if not 0%MissingParams%==0 ( 
     echo MissingParams=%MissingParams% 
     set MissingParams=%MissingParams%, 
     echo MissingParams=%MissingParams% 
    ) 
    set MissingParams=%MissingParams%TrustStore 
    echo MissingParams=%MissingParams% 
) 

當我運行上面的腳本它打印

MissingParams=SwitchURL 
MissingParams=SwitchURL 
MissingParams=SwitchURL 

並且當我回顯命令提示符的值時,與以前一樣SwitchURLTrustStore

D:\deleteme>echo %MissingParams% 
SwitchURLTrustStore 

有沒有人有任何想法?這令我沮喪不已。

回答

3

這是標準的括號/ delayedExpansion問題。

簡單的規則是%012%在%之前括號塊被執行(解析時)。

如果您以後需要var-expansion,則應該使用延遲擴展。
集解釋/?

setlocal EnableDelayedExpansion 
set MissingParams= 
set SwitchURL= 
set TrustStore= 
if 0!SwitchURL!==0 (set MissingParams=SwitchURL) 
    if 0!TrustStore!==0 (
    if not 0!MissingParams!==0 (  
     set MissingParams=!MissingParams!, 
    ) 
     set MissingParams=!MissingParams!TrustStore 
) 
+0

它的工作原理。什麼是!變量! ?我總是使用%變量%。 – 2011-02-18 03:42:55

1

看起來像是一個範圍界定問題。我能夠通過分支與工作的goto解決這個問題。這是我的版本與額外調試廢話:

@echo off 
set MissingParams= 
set SwitchURL= 
set TrustStore= 
if "%SwitchURL%"=="" (set MissingParams=SwitchURL) 
echo MissingParams1 is %MissingParams% 
if "%TrustStore%" EQU "" (GOTO :BRANCH1) 
:RESUME 
    echo MissingParams3 is %MissingParams% 
    set MissingParams=%MissingParams%TrustStore 
    echo MissingParams4 is %MissingParams% 
) 
echo MissingParamsF is %MissingParams% 
GOTO :eof 

:BRANCH1 
if "%MissingParams%" NEQ "" (set MissingParams=%MissingParams%,) 
GOTO RESUME