답변:
질문이 스크립트를 "실행"하도록 요청하고 전체 배치 파일이 Windows 8.1에서 로그 파일로 출력되는 경우 간단한 대답은 다음과 같습니다.
배치 파일의 시작 부분에 이것을 포함하십시오 ...
@echo off
set LOGFILE=batch.log
call :LOG > %LOGFILE%
exit /B
:LOG
[ your script goes here ]
귀하의 질문에, 당신은 언급 :
"... 출력을 파일에 넣지 만 실제로는 실행하지는 않습니다. 제 경우에는 나중에 참조 할 수 있도록 파일을 실행 한 다음 로그인해야합니다."
프로그램이 실행 중이고 출력이 파일에 저장되고 있다고 말했기 때문에 "executed" 대신 "displayed"를 의미한다고 생각했습니다 .
그것이 당신이 의도 한 것이 아니라면, 아마도 약간의 샘플 출력으로 그것이 더 잘 설명된다면 아마 도움이되었을 것입니다.
어쨌든,이 질문 / 답변이 도움이되는 다른 사람들이있는 경우를 대비 하여이 답변을 게시하고 있습니다.
따라서 기본적으로 스크립트의 출력을 파일로 캡처하고 스크립트가 실행되는 동안 화면에서 스크립트의 출력을 볼 수있는 것처럼 들립니다.
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
이 스크립트는 ls를 실행하고 출력을 log.txt라는 파일에 기록합니다.
exec >log.txt 2>&1
ls
로그가 실행되지 않습니다.