【问题标题】:Bizarre behavior with DOS batch if statement: expected or bug? [duplicate]DOS批处理if语句的奇怪行为:预期还是错误? [复制]
【发布时间】:2013-07-04 21:50:29
【问题描述】:

我刚刚遇到了一些完全奇怪的事情,我想知道这是否是预期的行为,或者我是否在批处理文件处理中发现了某种奇怪的错误。在不详细说明我正在尝试做的事情的情况下,下面是一个示例脚本,它显示了我正在谈论的行为。

或多或少,我遇到的是在 if 语句内部调用的函数调用内部设置的全局环境变量在 if 语句退出之前实际上并没有设置!

@echo off
set myvar=1

echo %myvar% (should be 1)

if [%fakevar%] == [] (
    call:setEnvVars
    echo %myvar% (should be 2^) 
)
echo %myvar% (should be 2)

:setEnvVars
    set myvar=2
GOTO:EOF

输出如下:

1(应该是 1)
1(应该是 2)
2(应该是 2)

所以,重申一下,这是预期的行为(为什么)?还是我遇到了某种错误?

【问题讨论】:

    标签: if-statement batch-file environment-variables global-variables delayedvariableexpansion


    【解决方案1】:

    您的问题与if 命令无关,而是与延迟扩展有关。试试这个例子:

    @echo off
    set myvar=1
    echo %myvar%  & set myvar=2 & echo %myvar%
    

    并将它与这个进行比较:

    @echo off
    setlocal EnableDelayedExpansion
    set myvar=1
    echo %myvar% & set myvar=2 & echo !myvar!
    

    更多详情,请在本论坛搜索“延迟扩展”和/或阅读set /? 命令帮助中的说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多