전체 배치 파일 출력 기록


12

컴퓨터에서 여러 설정을 조정하기 위해 명령 줄 스크립트를 사용하고 있습니다. 그러나 전체 출력을 .txt 또는 .log 파일에 기록하고 싶습니다.

로깅 시스템에 대한 기본 지식을 사용하면 출력을 파일에 넣지 만 실제로 실행하지는 않습니다. 내 경우에는 나중에 참조하기 위해 파일을 실행 한 다음 로그인해야합니다.

누군가이 작업을 수행하는 방법을 말해 줄 수 있습니까?

미리 감사드립니다! 뎀시


운영 체제를 지정하지 않았습니다!
Michael Hampton

답변:


11

질문이 스크립트를 "실행"하도록 요청하고 전체 배치 파일이 Windows 8.1에서 로그 파일로 출력되는 경우 간단한 대답은 다음과 같습니다.

배치 파일의 시작 부분에 이것을 포함하십시오 ...

@echo off
set LOGFILE=batch.log
call :LOG > %LOGFILE%
exit /B

:LOG
[ your script goes here ]

훌륭 해요, 고맙습니다! (물론 % LOGFILE %은 여기서 실제로 필요하지 않습니다. : P)
Andrew

1
내 스크립트는 질문을 제기합니다-이것이 사용되면 볼 수 없습니다. 실행하는 동안 모든 것을 기록하고 화면에 보는 방법?
Simon

예, 화면에있는 동안 볼 수 있도록 어떻게 하시겠습니까?
karl-police

3

귀하의 질문에, 당신은 언급 :

"... 출력을 파일에 넣지 만 실제로는 실행하지는 않습니다. 제 경우에는 나중에 참조 할 수 있도록 파일을 실행 한 다음 로그인해야합니다."

프로그램이 실행 중이고 출력이 파일에 저장되고 있다고 말했기 때문에 "executed" 대신 "displayed"를 의미한다고 생각했습니다 .

그것이 당신이 의도 한 것이 아니라면, 아마도 약간의 샘플 출력으로 그것이 더 잘 설명된다면 아마 도움이되었을 것입니다.

어쨌든,이 질문 / 답변이 도움이되는 다른 사람들이있는 경우를 대비 하여이 답변을 게시하고 있습니다.

따라서 기본적으로 스크립트의 출력을 파일로 캡처하고 스크립트가 실행되는 동안 화면에서 스크립트의 출력을 볼 수있는 것처럼 들립니다.

(tl; dr 버전 : 다음 과 같이 wintee 사용 하십시오.

script 2>&1 | wtee logfile.txt)


이 게시물에서는 작은 테스트 배치 파일을 사용하지만 필요한만큼 스크립트가 크고 복잡하거나 단순 할 수 있습니다.

C:\>type a.cmd
@echo off

echo Command: "dir /b a*"
dir /b a*
echo.

echo Command: "dir /b non-existant-file"
dir /b non-existant-file
echo.


이 배치 스크립트를 실행할 때 발생하는 상황입니다.

C:\>a.cmd
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

테스트 스크립트에서 "dir"명령의 첫 번째 실행은 성공하고 두 번째 명령은 실패합니다. 스크립트를 실행할 때 "오류 메시지"가 발생하는 상황을 보여주기 위해이 작업을 수행합니다.

스크립트를 실행하고 리디렉션 ( ">" )을 사용하여 출력을 캡처하면 다음을 볼 수 있습니다

C:\>a.cmd > log.txt
File Not Found

C:\>type log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"

C:\>

스크립트가 실행될 때 화면에 "파일을 찾을 수 없음"오류 메시지가 표시되어 실제로 파일로 캡처되지 않았습니다. ">" 는 STDOUT 스트림으로 전송 된 "정상 출력"을 캡처 하기 때문 입니다. "오류 메시지"는 일반적으로 STDERR 스트림으로 전송됩니다.

"정상 출력"및 "오류 메시지"를 캡처하려면 STDERR 스트림도 캡처해야합니다. STDERR 스트림 은 다음 명령 에서 "2> & 1""2" 로 표시됩니다 .

C:\>a.cmd > log.txt 2>&1
C:\>type log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

유닉스에는 표준 명령이 있습니다 : "tee"

"tee"명령을 사용하면 프로그램의 출력을 캡처하고 동시에 출력을 화면에 표시 할 수 있습니다.

"tee"명령은 Windows에서 표준이 아니지만 Windows 용 무료 버전의 "tee"( wintee)를 다운로드 할 수 있습니다 . 다운로드 한 프로그램의 이름은 다음과 같습니다 "wtee.exe".

아래와 같이 "wtee.exe"프로그램을 사용합니다.

스크립트 출력을 "log.txt"이전과 같이 이름이 지정된 파일로 캡처 하고 스크립트가 실행되는 동안 화면에 출력을 표시합니다.

C:\>a.cmd 2>&1 | wtee log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

C:\>type log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

0

이 스크립트는 ls를 실행하고 출력을 log.txt라는 파일에 기록합니다.

exec >log.txt 2>&1
ls

로그가 실행되지 않습니다.


1
이것은 유닉스 / 리눅스를 가정하지만 OP는 Windows에 대해 이야기합니다. 또한 스크립트를 실행하지는 않지만 사용자가 입력 한 명령의 출력을 기록하고 광기를 중지하는 방법에 대한 중요한 정보를 생략합니다.
Sven

나는 실제로 Windows에 대해 이야기하고 있습니다. 그래도 감사합니다 :)
Dempsey FoxDie Van Assche
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.