【问题标题】:How to detect if a variable is set or non-existent?如何检测变量是否已设置或不存在?
【发布时间】:2016-12-12 20:22:59
【问题描述】:

我正在尝试检测变量是否设置为 true 或什至未设置,但是当发生这种情况且未设置时,批处理文件在执行时会导致系统崩溃。如何解决这个问题?

例如:

:Shell
if %SHELL%==true goto SkipShell
SETX SHELL TRUE
:SkipShell

【问题讨论】:

  • if /? 特别是if defined。大多数人使用的一种技术是if "%SHELL%"=="true" goto SkipShell,因此== 的两边总是会有引号。
  • 使用if "%SHELL%" == "" goto NotDefined(即使用引号)将检查SHELL 是否已定义且不为空。您可以使用if not ... 反转测试的意义。

标签: windows batch-file environment-variables


【解决方案1】:

我一直在慢慢阅读if /? 并意识到有一种简单的方法可以解决这个问题。

:Shell
if DEFINED SHELL goto SkipShell
SETX SHELL TRUE
:SkipShell

我这样做是因为我想识别我的文件是在哪台 PC 上运行的。 谢谢Noodles

【讨论】:

  • 不 - 不幸的是,这不会按预期工作。如果shell 为空,则if exist 将作为if exist goto skipshell 执行,因此如果goto 存在,它将尝试执行程序skipshell。请注意,setx 也仅为 future cmd 实例分配值给变量名 - 不适用于任何现有实例包括当前实例
  • if exist 用于检查文件或目录是否存在;要检查是否定义了环境变量,请使用if defined;例如:if defined SHELL goto SkipShell(此处不要将变量名包含在%% 中!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多