为什么环境变量不会在脚本中更新

时间:2014-07-14 20:56:09

标签: windows cmd

我基本上是一个被迫进入Windows世界的Linux人,因此我需要编写一个bat脚本,但我遇到了以下问题。

这是我的.bat脚本

///////////////////////////
echo.
echo This is testbat script
echo -----------------------------------------------------------
echo.  

if "%1"=="" (
    echo "You did not enter an argument
) else (

    set "myvar="
    echo Argument is %1% 
    set myvar=%1%
    if "%myvar%"=="%1%" (
        echo myvar is %myvar%
    ) else (
        echo myvar is not set to %1
    )   
)
////////////////////////////////////////////////////////

似乎我需要运行此脚本两次才能更改myvar。

例如, 第一次跑:

  

testbat.bat你好

输出:
          这是testbat脚本           -----------------------

      Argument is hello
      myvar is not set to hello

SECOND RUN:

  

testbat.bat你好

输出:
          这是testbat脚本           -----------------------

      Argument is hello
      myvar is hello

现在改变再见的论点 第三次运行:

  

testbat.bat bye

输出:           这是testbat脚本           -----------------------

      Argument is bye
      myvar is not set to bye   (In fact, it is still hello here)

第四次运行(与THIRD相同的输入):

     > testbat.bat bye

输出:           这是testbat脚本           -----------------------

      Argument is bye
      myvar is bye    (Finally gets updated)

////////////////////////////////////

我的问题是为什么脚本第一次不更新环境变量?
为什么我需要再次运行脚本以使变量更改为脚本中的新值?我使用SET命令发现该值在环境中已更改,为什么脚本输出反映旧值。当然,在脚本完成之前,环境中的值可能不会改变,不确定。

我正在运行脚本,然后使用向上箭头编辑命令行,如果这有任何区别,但它似乎并没有。

1 个答案:

答案 0 :(得分:1)

您不能将%1%用作环境变量,因为%1是命令行可替换参数。

set/changedisplay括号内的变量或您需要的循环

@echo off
setlocal enabledelayedexpansion

并使用echo !myvar!