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

标签 windows batch-file cmd

我有简单的 cmd 脚本:

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

问题是它看起来像变量 somevar 的回显else block 在设置变量之前运行。每次我运行此命令时,参数的回显工作正常,但变量的回显显示上次运行的值。这种情况只发生在 if/else block 中,我不明白为什么。如果我这样修改脚本:

@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 语句中出现此类行为吗?

最佳答案

@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!
)

资源(必读):

关于windows - 在 Windows CMD 批处理文件中的 IF/ELSE 语句内设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56599132/

相关文章:

c# - 为什么我在通过 Shell32 读取公共(public)快捷方式时得到 E_ACCESSDENIED?

python - 如何打开执行 python 文件的终端

loops - 我们如何创建在特定范围内调用 .exe 的 FOR 循环?

c++ - 系统范围的API钩子(Hook)

windows - 是否有人在使用他们会推荐给其他人的第三方 Windows 注册表编辑器?

windows - 限制访问开发网站的最佳方法是什么?

windows - 批量改单行怎么办?

windows - 设置延迟扩展时如何检查变量的特殊字符

windows - 如何在包含引号 ( "") 的批处理文件中运行命令?

windows - 使用很多特殊参数在 .bat 中执行多个命令