2012-07-06 4 views
1

Windows에서 다른 도구를 호출하는 간단한 bat 스크립트를 작성했습니다. 그러나이 도구는 특정 옵션을 사용할 때 몇 가지 특정 디버그 라인을 출력합니다 (원래 코드의 버그 인 것 같습니다. 수정할 수 없거나 수정할 필요가 없습니다).Windows cmd 출력의 특정 줄을 어떻게 숨 깁니까?

특정 패턴 (예 : DEBUG:으로 시작)과 일치하는 명령으로 출력되는 라인을 억제하는 방법이 있습니까?

(FYIO는 :.이 도구는 latexdiff.exe이며, 매번 --flatten 옵션이 사용되는 debug 변수에 조건 및 인쇄하지 않은 perl source code의 일부 print STDERR "DEBUG:... 라인이있다 나는 완전히 중 하나를 표준 에러를 억제하고 싶지 않아요.

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

/v 옵션은 기본적으로 주위의 패턴을 회전, 즉 findstr.exe는 EV를하게됩니다 :)

답변

3

다음 시도 할 수 erything through, 패턴과 일치하지 않습니다. /b 옵션은 단순히 패턴이 줄의 시작 부분에 있어야한다고 말합니다.

2>&1은 STDERR을 STDOUT으로 리디렉션하며, 말한 것처럼 그 행은 STDOUT이 아닌 STDERR에 기록되기 때문에 필수입니다. "부작용"으로 모든 출력은 이제 STDOUT에 기록됩니다. 당신이 할 필요가 STDOUT에 다른 출력이있는 경우

업데이트, 당신은, 당신은 diff 파일로 STDOUT 리디렉션 일부 파일에 STDERR 리디렉션 인이

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

처럼 뭔가를 할 수 있습니다. 그런 다음 파일을 입력하면 오류 메시지가 표시됩니다.

당신과 같이, 그것의 자신의 배치 파일에 그것을 넣어 할 수 있습니다

:

@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는 임시 파일 사용에서 단점은 처리하는 동안 오류 메시지가 표시되지 않지만 맨 마지막에 표시된다는 것입니다. 그게 문제가 아니라면, diff가 빠르지 않아야해서는 안됩니다. 그 해결책이 유용 할 것입니다.

+0

브릴리언트. 하나의 추가 어려움을 제외하고 나는 생각하지 않았다. 'latexdiff.exe'는 출력 (diff 파일)을 stdout에 씁니다. 출력 파일을 명시 적으로 지정하는 옵션이없는 것 같습니다. 그래서 사용해야하는 구문은'latexdiff old.tex new.tex> diff와 같습니다. tex'. 해결책을 넣을 때마다 (예를 들어'diff.tex' 다음에) 디버그 라인은 diff.tex 파일로 끝납니다 (작성한대로 모든 것이 이제 stdout으로 리디렉션됩니다). 이 문제를 해결하는 방법을 모르겠습니다. – Rabarberski

+0

업데이트 된 솔루션이 완벽하게 작동합니다. 올바른 errorlevel을 설정하는 것은 좋은 방법입니다. 고마워요! – Rabarberski

관련 문제