2

Windows では、別のツールを呼び出す単純なバット スクリプトを作成しました。ただし、このツールは、特定のオプションを使用すると、いくつかの特定のデバッグ行を出力します (元のコードのバグのようで、変更できない/変更したくない)。

特定のパターン (で始まるなどDEBUG:) に一致するコマンドによって出力される行を抑制する方法はありますか?

(FYIO: ツールはであり、 perl ソース コードには、変数を条件とせず、オプションが使用されるたびに出力される行latexdiff.exeがいくつかあります。stderrも完全に抑制したくありません。)print STDERR "DEBUG:...debug--flatten

4

1 に答える 1

4

次のことを試すことができます。

latexdiff.exe 2>&1| findstr /v /b "DEBUG:"

この/vオプションは基本的にパターンを反転findstr.exeさせます。つまり、パターンに一致せずにすべてを通過させます。この/bオプションは、パターンが行の先頭に出現する必要があることを示しています。

あなた2>&1が言ったように、行はSTDOUTではなくSTDERRに書き込まれるため、STDERRをSTDOUTにリダイレクトします。「副作用」として、すべての出力が STDOUT に書き込まれるようになったことに注意してください。

必要なSTDOUTに他の出力がある場合は更新してください。次のようなことができます

latexdiff.exe old.tex new.tex > diff.tex 2> latexdiff.stderr
type latexdiff.stderr | findstr /v /b "DEBUG:"

つまり、STDOUT を差分ファイルにリダイレクトし、STDERR を何らかのファイルにリダイレクトします。その後、ファイルを入力するだけでエラー メッセージが表示されます。

次のように、それを独自のバッチ ファイルに入れることができます。

@echo off
setlocal
REM determine a suitable temporary filename
set error_file=%TEMP%\latexdiff.%RANDOM%.stderr
REM run actual diff and save its exit code for later
latexdiff.exe "%~1" "%~2" > "%~3" 2> "%error_file%"
set error_level=%ERRORLEVEL%
REM dump error messages
type "%error_file%" | findstr /v /b "DEBUG:"
REM remove temporary error file and exit with latexdiff's exit code.
del /q "%error_file%"
exit /b %error_level%

その後、次のように呼び出すことができますlatexdiff_wrapper.cmd old.tex new.tex diff.tex。一時ファイルを使用する場合とは別に、処理中にエラー メッセージが表示されるのではなく、処理の最後にエラー メッセージが表示されるという欠点があります。それが問題でない場合は、diff が高速である必要があるため、そうすべきではありません。その解決策が役立つ場合があります。

于 2012-07-06T12:32:16.193 に答える