Windows Server 2008을 사용하여 Windows 작업 스케줄러로 실행중인 스크립트의 출력을 캡처하려면 어떻게해야합니까?
나는 다소 긴 사용자 정의 인쇄 배치 스크립트를 테스트하고 있으며 디버깅 목적으로 매일 밤 모든 출력을보고 싶습니다.
Windows Server 2008을 사용하여 Windows 작업 스케줄러로 실행중인 스크립트의 출력을 캡처하려면 어떻게해야합니까?
나는 다소 긴 사용자 정의 인쇄 배치 스크립트를 테스트하고 있으며 디버깅 목적으로 매일 밤 모든 출력을보고 싶습니다.
답변:
작업 스케줄러에서 명령 문자열로 이것을 시도하십시오.
cmd /c yourscript.cmd > logall.txt
cmd /c ""C:\temp\My test dir\something 123\myTool.exe" > Tilo_log.txt 2>&1"
는 >>
매번 덮어 쓰지 않고 로그 파일을 추가합니다. 는 2>&1
또한 로그 파일에 오류를 보낼 것입니다.
cmd /c YourProgram.exe >> log.txt 2>&1
cmd.exe
명령 프로세서를 사용 하여 예약 된 작업의 출력을 기록 할 타임 스탬프 파일 이름을 만듭니다.여기에서 다른 사람의 답변을 기반으로 파일 이름에 날짜 및 / 또는 시간이 포함 된 출력 파일을 만들 수 있습니다. cmd.exe
명령 프로세서를 사용하여 이를 수행 할 수 있습니다.
참고 : 이 기술은 내부 Windows 환경 변수의 문자열 출력을 가져와 문자 위치에 따라 분할합니다. 이로 인해 아래 예제에 제공된 정확한 값이 사용하는 Windows 지역에 맞지 않을 수 있습니다. 또한 일부 지역 설정의 경우 날짜 또는 시간의 일부 구성 요소는 값이 10 미만일 때 생성 된 파일 이름에 공백을 도입 할 수 있습니다.이 문제를 완화하려면 파일 이름을 따옴표로 묶어서 파일에 의도하지 않은 공백이 없도록하십시오. name은 생성중인 명령 줄을 깨지 않습니다. 상황에 가장 적합한 것을 실험하고 찾으십시오.
그주의 PowerShell
보다 더 강력하다 cmd.exe
. 더 강력한 한 가지 방법은 다른 Windows 지역을 처리 할 수 있다는 것입니다. 그러나이 대답은 사용하여이 문제를 해결하는 것입니다 cmd.exe
,하지 PowerShell
, 그래서 우리는 계속한다.
사용 cmd.exe
다음과 같은 방법으로 날짜와 시간의 다른 구성 요소에 액세스 할 수 있습니다 슬라이스 내부 환경 변수를 %date%
하고 %time%
다음과 같이 (다시, 정확한 슬라이스 값은 Windows에서 구성이 지역에 따라 달라집니다) :
%date:~10,4%
%date:~4,2%
%date:~7,2%
%time:~0,2%
%time:~3,2%
%time:~6,2%
이 날짜 / 시간 형식 " Log_[yyyyMMdd]_[hhmmss].txt
"을 사용하여 로그 파일의 이름을 지정한다고 가정합니다 . 다음을 사용합니다.
Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt
이를 테스트하려면 다음 명령 줄을 실행하십시오.
cmd.exe /c echo "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt"
모두 함께 퍼팅 모두 리디렉션 stdout
및 stderr
현재 날짜와 시간라는 이름의 로그 파일에 스크립트에서이 사용은 명령 행으로 다음을 사용할 수 있습니다 :
cmd /c YourProgram.cmd > "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1
인스턴스를 처리하기 위해 파일 이름을 따옴표로 묶으면 날짜 또는 시간 구성 요소가 공백 문자를 도입 할 수 있습니다.
제 경우 현재 날짜 / 시간이 10/05/2017 9:05:34 AM이면 위의 명령 줄은 다음을 생성합니다.
cmd /c YourProgram.cmd > "Log_20171005_ 90534.txt" 2>&1
다음과 같이 출력하려는 행에 로그 파일에 쓸 수 있습니다.
@echo off
echo Debugging started >C:\logfile.txt
echo More stuff
echo Debugging stuff >>C:\logfile.txt
echo Hope this helps! >>C:\logfile.txt
이런 식으로 모든 것을 트롤링하고 싶지 않은 경우 출력 할 명령을 선택할 수 있습니다. 는 >
지정된 파일로 출력합니다 (존재하지 않는 경우 파일을 만들고있는 경우 덮어 쓰기). 는 >>
지정된 파일에 추가됩니다 (파일이없는 경우 생성하고있는 경우 내용에 추가).
프로그램을 실행하고 stdout 및 stderr를 타임 스탬프가있는 파일에 쓰는 방법의 예 :
cmd /c ""C:\Program Files (x86)\program.exe" -param fooo >> "c:\dir space\Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1"
핵심 부분은 전체 부분을 cmd /c
큰 따옴표로 묶고 그 안에 평소와 같이 큰 따옴표를 사용하는 것입니다. 또한 날짜는 로케일에 따라 다르며이 예제는 미국 로케일을 사용하여 작동합니다.