2012-07-06 107 views
1

在Windows上,我寫了一個調用另一個工具的簡單bat腳本。但是,使用某些選項時,該工具會輸出一些特定的調試行(似乎是原始代碼中的錯誤,我不能/不想修改)。如何禁止Windows cmd輸出中的特定行?

有沒有一種方法可以抑制與特定模式匹配的命令輸出行(如從DEBUG:開始)?

(FYIO:該工具latexdiff.exe,並且有一些print STDERR "DEBUG:...線在perl source code不屬於有條件的debug變量,每次打印的--flatten選項用於我不想壓抑標準錯誤完全要麼。 )

回答

3

你可以嘗試以下方法:

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

/v選項基本上轉身的格局,即findstr.exe會讓EV刺穿,不符合模式。 /b選項只是說該模式應該出現在一行的開頭。

2>&1將STDERR重定向到STDOUT並且是必需的,因爲正如您所說,這些行會寫入STDERR而不是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。 Appart不使用臨時文件,缺點是,處理過程中不會出現錯誤消息,而是最終結束。如果這不是問題,它不應該因爲差異應該很快,您可能會發現該解決方案很有用。

+0

輝煌。除了我沒有想到的另外一個難題。 'latexdiff.exe'將它的輸出(一個diff文件)寫入標準輸出,似乎沒有選擇明確指定輸出文件,所以我必須使用的語法就像'latexdiff old.tex new.tex> diff。 tex'。無論我把解決方案放在哪裏(例如'diff.tex'後面),調試行都會在diff.tex文件中出現(因爲正如你所寫的,現在所有東西都被重定向到stdout)。我不確定如何解決此問題 – Rabarberski 2012-07-06 13:59:22

+0

您的更新解決方案完美無瑕。設置正確的錯誤級別是一個很好的接觸。非常感謝 ! – Rabarberski 2012-07-09 08:41:03