嵌套IF / ELSE中的命令行SET

时间:2017-06-26 21:21:38

标签: command-line nested set

我只需要在某些条件下初始化多个env变量,除了命令行之外我不能使用任何东西。 对于我的问题的例子,我将采用初始化字母表的简单案例。

第一个cmd脚本是:

@echo OFF
set PATH=%PATH%;"%~dp0"
IF "%_ALPHABET%"=="" (
    echo "DEFINE"
    call setEnvA
    call set "_ALPHABET=%_ALPHABET%;b"
) ELSE (
    echo "ALREADY DEFINE"
    set _ALPHABET=
    set A_ADDED=
)

setEnvA cmd是:

IF "%A_ADDED%"=="" (
    set A_ADDED=OK
    set _ALPHABET=%_ALPHABET%;a
)

我在考虑

;a;b

结果,但我只得到

;b

我试图抛出随机的delayedexpansion但没有任何结果。我开始认为这是不可能的,我应该做一些肮脏的转到。

1 个答案:

答案 0 :(得分:0)

在执行对setEnvA的调用之前,在括号中替换环境变量_ALPHABET的内容。您需要执行以下操作:

@echo OFF
set PATH=%PATH%;"%~dp0"
IF "%_ALPHABET%"=="" (
    echo "DEFINE"
    call setEnvA
    call :set_ALPHABET
) ELSE (
    echo "ALREADY DEFINE"
    set _ALPHABET=
    set A_ADDED=
)
exit /b

:set_ALPHABET
set "_ALPHABET=%_ALPHABET%;b"