0

バッチスクリプトステートメントを記述したいのですが、FINDSTRは文字列をチェックする必要があり、見つかった場合は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)
      )

そして、それは機能していません。エラーが表示されますか?前もって感謝します。

4

1 に答える 1

0

いくつかの潜在的な問題があります。

  • %workDir%またはにスペース%filenm%または特殊文字を含めることができます。安全のため、値でまだ行っていない場合は、引用符で囲む必要があります。

  • &&||演算子の両方を使用する場合は注意が必要です。失敗した後のコマンドの場合、成功する前の元のコマンドであっても、スクリプトがセクション&&に分類される可能性があります。メールを送信するCSCRIPTコマンドが心配です。今日成功したとしても、将来失敗する可能性があり、ロジックに影響を与える可能性があります。||&&

  • 2番目の検索文字列は、5つの異なる検索ではなく、フレーズであると想定されていると思います。/ Cオプションを使用しない限り、検索文字列はスペースで区切られることに注意してください。

  • 入力としてファイルを提供しなかったため、2番目の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
)
于 2012-07-02T22:29:09.790 に答える