【问题标题】:Attempting to nest an IF ELSE into an IF EXIST in cmd.exe尝试将 IF ELSE 嵌套到 cmd.exe 中的 IF EXIST
【发布时间】:2013-04-01 00:02:17
【问题描述】:

这是我的代码:

IF EXIST %CD%\tictactoeXwinlog.log (
  ECHO %xwinlog% > tictactoeXwinlog.log
  ) ELSE (
    IF %xwinlog% > 0 (
ECHO %xwinlog% > %CD%\tictactoeXwinlog.log
) ELSE (
  ECHO 0 > %CD%\tictactoeXwinlog.log
  )

我试图用简单的英语做的是检查日志文件是否存在。如果是,则将变量 %xwinlog% 的当前值写入日志,覆盖其中的任何内容。如果它不存在,我希望它确保变量的值高于 0,如果是,则将其写入日志文件,如果不高于零,则将零写入日志文件。最后一部分是因为无论出于何种原因,当它试图将变量写入日志并且变量为0时,它反而写“ECHO is off”

我得到的是一个错误,说“)此时是意外的”

非常感谢任何帮助。

【问题讨论】:

  • 你应该注意%CD%总是被当前目录替换;这意味着%CD%\filename.extfilename.ext完全相同,因此通常从不使用前一种形式...

标签: shell batch-file cmd


【解决方案1】:
  1. Alex 指出,缺少封闭括号是一个问题。
  2. 另一个问题是 > 是一个重定向符号。使用 GTR 进行算术比较。
  3. 在比较中使用“%CD%\tictactoeXwinlog.log”等表达式时请使用引号,以防 %CD% 中有空格。
  4. 我认为导致您必须“检查 0”的问题实际上是 xwinlog 是空白的,这导致 echo 语句显示 ECHO 状态(开/关)。这就是为什么我总是使用 回声。 有些人用 回声:
  5. 如果 xwinlog 是一个数值,那么你的代码可以简化为:

    IF NOT %xwinlog% gtr 0 SET xwinlog=0
    ECHO %xwinlog% > tictactoeXwinlog.log
    
  6. 如果winlog是一个字符串值,那么你的代码可以简化为:

    IF "%xwinlog%"=="" SET xwinlog=0 or Any string of your choice... like Not Found
    ECHO %xwinlog% > tictactoeXwinlog.log
    

【讨论】:

    【解决方案2】:

    我猜是缺少括号。

    IF EXIST %CD%\tictactoeXwinlog.log (
      ECHO %xwinlog% > tictactoeXwinlog.log
    ) ELSE (
      IF %xwinlog% > 0 (
        ECHO %xwinlog% > %CD%\tictactoeXwinlog.log
       ) ELSE (
         ECHO 0 > %CD%\tictactoeXwinlog.log
       )
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 2021-12-18
      • 1970-01-01
      相关资源
      最近更新 更多