我想写一个批处理脚本语句,其中: 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)
)
而且,它不起作用。你看到有什么错误吗?提前谢谢。
答案 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
)