2011-02-17 62 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