2012-01-12 1 views
2

폴더 배치 파일을 반복 실행하고 각 파일에 명령을 실행하는 Windows 배치 파일이 있습니다. 특히 xmllint를 실행하여 일부 파일의 유효성을 검사합니다.명령 (배치 루프에서 실행)의 출력을 파일로 리디렉션하는 방법은 무엇입니까?

for %%i in (c:\temp\*.xml) do (
    C:\XMLLINT\xmllint -noout -schema "C:\schemas\schema.xsd" "%%~dpnxi" >> c:\output.txt 
) 

현재 출력이 화면에 표시됩니다. 출력 파일에 이러한 모든 명령의 출력을 표시하려고합니다. 이것을 어떻게 할 수 있습니까? 추가 연산자 (>>)를 사용하면 빈 파일을 만드는 경우를 제외하고는 아무 것도 수행되지 않습니다.

xmllint 때문입니까?

답변

4

프로그램에서 오류 출력을 리디렉션하려고하면 stderr에 쓰고있을 수 있습니다. 당신은 그것을 재 시도 할 수 있습니다 :

for %%i in (c:\temp\*.xml) do (
    C:\XMLLINT\xmllint -noout -schema "C:\schemas\schema.xsd" "%%~dpnxi" >> c:\output.txt 2>&1 
) 

는 기본적으로 마지막에 2>&1stdout에 (2) stderr에서 아무것도 리디렉션을 의미합니다 (이는 1). stdout이 파일로 리디렉션되었으므로 파일에 stderr 스트림이 표시됩니다. 희망이 당신을 위해 작동합니다!

0

문서를 here이라면 "-noout"옵션을 제거하거나 "-output c : \ output.txt"를 추가하려고 시도한 적이 있습니까?

+1

-outout은 유효성 검사중인 파일의 내용을 출력하지 않는 것이고 -output을 추가하면 결과에 하나의 파일이 생성되지 않습니다. – user453441