尝试将IF ELSE嵌套到cmd.exe中的IF EXIST中

时间:2013-04-01 00:02:17

标签: shell batch-file cmd

这是我的代码:

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,则将0写入日志文件。最后一部分是因为无论出于何种原因,当它试图将变量写入日志并且变量为0时,它会写入“ECHO is off”

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

  1. 亚历克斯指出的缺少关闭的paren是一个问题。
  2. 另一个问题是>是一个重定向符号。使用GTR进行算术比较。
  3. 在表达式周围使用引号,例如"%CD%\ tictactoeXwinlog.log"当用于比较时,如果%CD%中有空格。
  4. 我认为你的问题导致你必须检查0"实际上,xwinlog是空白的,这导致echo语句显示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
    

答案 1 :(得分:1)

我想是缺少括号。

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