このすでに貴重なスレッドにささやかな貢献を加えてもよろしいでしょうか。他のソリューションは実際のエラー テキストを取り除く可能性がありますが、アプリケーションの失敗を示す %ERRORLEVEL% を無視しています。そして、「ファイルが見つかりません」というエラーでない限り、正当に %ERRORLEVEL% が必要です。
いくつかの例:
具体的には、エラーをデバッグして排除します。
forfiles /p "[file path...]\IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 | findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&ECHO found error||echo found success
oneliner を使用して ERRORLEVEL の成功または失敗を返す:
forfiles /p "[file path...]\IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 | findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&EXIT /B 1||EXIT /B 0
ワンライナーを使用して、他のコードの最中にあるバッチファイルのコンテキスト内で成功するために、ERRORLEVEL をゼロに維持します (ver > nul は ERRORLEVEL をリセットします)。
forfiles /p "[file path...]\IDOC_ARCHIVE" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 | findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&ECHO found error||ver > nul
SQL Server Agent CmdExec ジョブ ステップの場合、次のようになりました。バグかどうかはわかりませんが、ステップ内の CmdExec はコードの最初の行のみを認識します。
cmd /e:on /c "forfiles /p "C:\SQLADMIN\MAINTREPORTS\SQL2" /s /m *.txt /d -1 /c "cmd /c del @path" 2>&1 | findstr /V /O /C:"ERROR: No files found with the specified search criteria."2>&1 | findstr ERROR&&EXIT 1||EXIT 0"&exit %errorlevel%