条件执行(IF,ELSE)不工作

时间:2012-07-02 20:44:54

标签: batch-file if-statement conditional-operator

我想写一个批处理脚本语句,其中: FINDSTR必须检查字符串AND IF,然后打印出FAILED并结束程序 如果没有找到,那么去检查/寻找另一个字符串和如果找到然后打印出成功并关闭程序,如果没有找到,然后再次打印出错误信息。 有任何想法吗?

这是我做的:

ECHO Checking the log file for errors...
FINDSTR /C:"Open failed" some_Log.txt && (ECHO Deployment FAILED. 
cscript //nologo success_mail.vbs 
pause) || FINDSTR "RC (return code) = 0" && (ECHO Deployment was successful.
cscript //nologo fail_mail.vbs
pause)

我不知道为什么它不起作用。任何帮助将不胜感激。

这是我最新的一个:

  ECHO Checking the log file for errors...
    FINDSTR /C:"Open failed" some_Log.txt some_Log.txt && (
     ECHO Deployment FAILED. 
     cscript //nologo fail_mail.vbs 
     GOTO offshore ) || (
      FINDSTR /C:"RC (return code) = 0" some_Log.txt && (
        ECHO Deployment was successful.
        cscript //nologo success_mail.vbs 
        GOTO offshore)
      )

而且,它不起作用。你看到有什么错误吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我看到了一些潜在的问题。

  • 您的%workDir%%filenm%可能包含空格或特殊字符。为安全起见,如果您尚未在价值中使用过,请将它们用引号括起来。

  • 使用&&||运算符时必须小心。如果&&之后的命令失败,则可能导致脚本落入||部分,即使&&之前的原始命令成功。我担心你的CSCRIPT命令发送邮件。即使它今天成功,也许它可能在将来失败,你的逻辑可能会受到影响。

  • 我猜测第二个搜索字符串应该是一个短语,而不是5个不同的搜索。请记住,除非使用/ C选项,否则搜索字符串将按空格分隔。

  • 您的第二个FINDSTR挂起,因为您忽略了提供文件作为输入,因此它正在等待stdin上的数据。

我会像你这样构建你的代码

ECHO Checking the log file for errors...
set "file=%workDir%\%filenm%_DEV_Log.txt"
set "search1=Error: Open failed because: No such file or directory"
set "search2=RC (return code) = 0"
set "err="
FINDSTR /C:"%search1%" "%file%" && (set err=1) || (
  FINDSTR /C:"%search2%" "%file%" || set err=1
)
if defined err (
  ECHO Deployment FAILED.
  cscript //nologo success_mail.vbs "%filenm%_ddl_DEV.sql" "%file%"
  pause
) else (
  ECHO Deployment was successful.
  cscript //nologo fail_mail.vbs "%filenm%_ddl_DEV.sql" "%file%"
  pause
)