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

在Windows CMD批处理文件中的IF/ELSE语句中设置变量,windows,batch-file,cmd,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.

我有一个简单的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%
结果如我所料。使用不同的参数交替运行脚本可以清楚地看到问题

我读过一些帖子,但我认为这是另一种问题

那么,在IF/ELSE语句中有什么方法可以防止这种行为呢

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

资源(必读):

  • (命令参考)
  • (其他特殊性)
  • (专页)
  • 调用echo%%somevar%%
  • (它不是
    %1%
    ,而是
    %1

如果%1,您最好更改
。(
如果“%~1”==”(
也是。
@echo off
SETLOCAL EnableDelayedExpansion
if  %1.==. (
    echo Missing argument
) else (
    SET somevar=%1
    echo %1
    echo !somevar!
)