【问题标题】:IF in batch fileIF 在批处理文件中
【发布时间】:2015-03-25 12:51:38
【问题描述】:

如果我这样做(MyVar 设置为“hi”值)

IF %MyVar% == "hi" ( Echo Hi )

然后我得到了输出

Hi

但如果我这样做(ProgramFile(x86) 设置为 C:\Program Files (x86))

IF %ProgramFiles(x86)% == "C:\Program Files (x86)" ( Echo Hi )

然后我就出局了

Files was unexpected at this time.

如果我这样做:

 IF "%ProgramFiles(x86)%" == "C:\Program Files (x86)" ( Echo Hi )

然后我得到NO输出

为什么在 ProgramFile(x86) 环境变量的情况下输出不正确?

【问题讨论】:

  • set ProgramFiles(x86) 说什么?
  • 无法重新创建。 IF "%ProgramFiles(x86)%" == "C:\Program Files (x86)" ( Echo Hi ) 在我的机器上回显 Hi。您缺少输出可能是拼写错误的结果。为什么不直接使用if defined PROGRAMFILES(x86) echo Hi 呢?
  • @Stephan set ProgramFiles(x86) 给出输出 C:\Program Files (x86)
  • @ shA.t & @rojo : if defined PROGRAMFILES(x86) echo HiIF /I "%ProgramFiles(x86)%" equ "C:\Program Files (x86)" (echo Hi) 工作正常,但是当我使用 == 比较运算符,它给出Files was unexpected at this time. 输出
  • 那是因为您没有将变量括在引号中。它的值包含一个空格。

标签: windows batch-file scripting


【解决方案1】:

If 启用命令扩展如果更改如下:

  • IF [/I] string1 compare-op string2 command
  • IF CMDEXTVERSION number command
  • IF DEFINED variable command

其中compare-op 可能是以下之一:

EQU - equal
NEQ - not equal
LSS - less than
LEQ - less than or equal
GTR - greater than
GEQ - greater than or equal

如果指定了/I 开关,则表示进行不区分大小写的字符串比较。 /I 开关也可用于 IF 的 string1==string2 形式。这些比较是通用的,如果 string1 和 string2 都由所有数字组成,则字符串将转换为数字并执行数字比较。

使用compare-op/I 会更好;

所以你可以试试这个代码:

IF /I "%ProgramFiles(x86)%" equ "C:\Program Files (x86)" (echo Hi)

但可能推荐文字无效:

CMDEXTVERSION 条件的工作方式与 ERRORLEVEL 类似,不同之处在于它与与命令扩展关联的内部版本号进行比较。第一个版本是 1。当对命令扩展添加显着增强时,它将增加 1。禁用命令扩展时,CMDEXTVERSION 条件永远不会为真。

【讨论】:

  • 试试这个IF %ProgramFiles(x86)% equ %ProgramFiles(x86)% (echo hi)
猜你喜欢
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 2017-08-01
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
相关资源
最近更新 更多