【问题标题】:How to see if an environment variable is defined through batch script?如何查看是否通过批处理脚本定义了环境变量?
【发布时间】:2021-03-15 05:24:28
【问题描述】:

我正在编写一个批处理脚本来使用现有的环境变量(如果存在)。如果没有,我需要创建该环境变量。当环境变量名称已经存在时,下面的代码运行良好。当 env 变量不存在时,它只是作为 flash 弹出。

set "my_path=%ENV_VARIABLE_NAME%"
IF %my_path%=="" (
   echo no path found
   set "my_path = C:/Users/xyz/"
) ELSE (
   echo path found
)
pause

【问题讨论】:

    标签: windows batch-file cmd environment-variables


    【解决方案1】:

    需要注意的是,使用IF Defined 不仅仅是检查变量的一种不同方法,它通常是一种更可取的方法,因为它提供了两个增强功能:

    因为它不会显式检查变量的内容,而是在命令运行时查找名称。

    这意味着,如果变量的内容很难正确转义,则不会有任何问题..

    这也意味着无论您是否使用延迟扩展,该命令都可以在 for 循环或括号中使用,因为它的查找严格来说是一个命令,因此必须在执行时而不是预执行时完成

    您也可以使用SET | FIND "MYVar=" 复制此功能,因为这需要运行 set 命令并在执行时检查环境状态,而不是预执行。

    【讨论】:

      【解决方案2】:

      这是我用来执行您在代码中提供的任务的机制。

      @If Not Defined ENV_VARIABLE_NAME (
          Echo No path found.
          Set "my_path=C:\Users\xyz"
      ) Else (
          Echo Path found.
          Set "my_path=%ENV_VARIABLE_NAME%"
      )
      

      或者作为没有不必要的echoing 的单行:

      @If Not Defined ENV_VARIABLE_NAME (Set "my_path=C:\Users\xyz") Else Set "my_path=%ENV_VARIABLE_NAME%"
      

      或者:

      @If Defined ENV_VARIABLE_NAME (
          Echo Path found.
          Set "my_path=%ENV_VARIABLE_NAME%"
      ) Else (
          Echo No path found.
          Set "my_path=C:\Users\xyz"
      )
      

      或者作为没有不必要的echoing 的单行:

      @If Defined ENV_VARIABLE_NAME (Set "my_path=%ENV_VARIABLE_NAME%") Else Set "my_path=C:\Users\xyz"
      

      【讨论】:

        【解决方案3】:

        你的主要问题是这条线

        IF %my_path%=="" (
        

        当变量为空时,解析为

        IF =="" (
        

        这是不正确的语法。解析器显示错误消息并结束解析(双击启动窗口时关闭窗口)。

        正确的语法应该是(引用比较的双方):

        IF "%my_path%" == ""
        

        虽然我更喜欢@jeb 的解决方案:IF defined my_path (

        您的代码中还有另一个问题:

        set "my_path = C:/Users/xyz/"
        

        将变量 %my_path % 设置为 <space>C:/Users/xyz/ - 这不是您想要的。正确的是:

        set "my_path=C:\Users\xyz\"
        

        (注意:Windows中正确的路径分隔符是反斜杠,不是斜杠)

        【讨论】:

        • Although I'd prefer @jeb's solution - 我更喜欢你的答案,它更广泛:-)
        【解决方案4】:

        语法是:

        IF defined my_path
        

        另见帮助IF /?

        【讨论】:

          猜你喜欢
          • 2017-09-06
          • 1970-01-01
          • 2012-03-19
          • 1970-01-01
          • 2014-01-08
          • 2017-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多