在Windows CMD批处理文件的IF / ELSE语句中设置变量

时间:2019-06-14 13:23:52

标签: windows batch-file cmd

我有简单的cmd脚本:

@echo off
if  %1.==. (
    echo Missing argument
) else (
    SET somevar=%1
    echo %1
    echo %somevar%
)

问题在于,在设置变量之前,else块中的变量somevar的回显正在运行。每次我运行此命令时,参数的回显效果都很好,但变量的回显则显示上一次运行的值。这仅在if / else块中发生,我不明白为什么。如果我这样修改脚本:

@echo off
if  %1.==. (
    echo Missing argument
    exit /B
)

SET somevar=%1
echo %1
echo %somevar%

结果符合我的预期。用不同的参数交替运行脚本可以清楚地看到问题。

我读了一些帖子,例如。 How to clear variables after each batch script run?,但我认为这是另一种问题。

那么,有什么方法可以防止IF / ELSE语句中的此类行为?

1 个答案:

答案 0 :(得分:1)

@echo off
if  %1.==. (
    echo Missing argument
) else (
    SET somevar=%1
    echo %1
    CALL echo %%somevar%%
)

@echo off
SETLOCAL EnableDelayedExpansion
if  %1.==. (
    echo Missing argument
) else (
    SET somevar=%1
    echo %1
    echo !somevar!
)

资源(必读):