작업 스케줄러에서 실행중인 스크립트의 출력을 어떻게 캡처합니까?


95

Windows Server 2008을 사용하여 Windows 작업 스케줄러로 실행중인 스크립트의 출력을 캡처하려면 어떻게해야합니까?

나는 다소 긴 사용자 정의 인쇄 배치 스크립트를 테스트하고 있으며 디버깅 목적으로 매일 밤 모든 출력을보고 싶습니다.


2
때때로 이것은 작동하지 않습니다. 즉, 로그 파일이 생성되지 않습니다. 이로 이어질 수있는 한 가지 시나리오는 Windows에서 작업이 아직 실행 중이라고 잘못 생각하기 때문에 작업이 전혀 시작되지 않은 경우입니다. 작업 내역 (작업 속성의 내역 탭-정보가 표시되는 데 몇 초가 걸릴 수 있음)에서 찾아서 추적 할 수 있습니다.
Daniel

답변:


83

작업 스케줄러에서 명령 문자열로 이것을 시도하십시오.

cmd /c yourscript.cmd > logall.txt

2
멋지고 래퍼가 필요하지 않고 훌륭하게 작동하며 task-scheduler-triggered bat / cmd에서 호출되는 자식 powershell 스크립트의 출력도 기록합니다. 감사합니다!
Jonesome Reinstate Monica

8
또한 cmd /c "path with spaces/command.cmd > file.txt"공백이있는 경우 사용 하십시오. 2>&1에서 이반의 대답은 또한 따옴표 안에 간다.
Dinei

3
내 작업을 수행하려면 큰 따옴표를 사용해야합니다. stackoverflow.com/a/6378038/1747983 cmd /c ""C:\temp\My test dir\something 123\myTool.exe" > Tilo_log.txt 2>&1"
Tilo

1
5 년이 흘렀다는 것을 알고 있지만 작업을 수행하는 최소한의 방법으로 받아 들여지는 대답으로 바 꾸었습니다.
Mechaflash

이제 작업을 실행할 때 나타나는 명령 창이 있습니다. 그것을 방지하는 방법?
Chris

57

stderr 사용 (대부분의 오류가 발생하는 위치) :

cmd /c yourscript.cmd > logall.txt 2>&1

56

@ user2744787의 답변을 보완하기 위해 다음은 cmd예약 된 작업에서 인수 를 사용하는 방법을 보여주는 스크린 샷입니다 .

로그 파일에 예약 된 작업 cmd 출력

프로그램 / 스크립트 : cmd

인수 추가 : /c run_with_default_port.bat > IMQuantWebServices.log


5
예약 된 작업을 통해 서비스를 시작하는 것 같습니다. 이것이 백그라운드에서 지속적으로 실행되는 서비스 여야하는 경우 NSSM을 대안으로 살펴보십시오. 그것은 등 실패 후 다시 시작 Windows 서비스 및 핸들 같은 명령을 실행
leemes

43

>>매번 덮어 쓰지 않고 로그 파일을 추가합니다. 는 2>&1또한 로그 파일에 오류를 보낼 것입니다.

cmd /c YourProgram.exe >> log.txt 2>&1

39

yourscript.cmd를 호출하는 debug.cmd를 가질 수 있습니다.

yourscript.cmd > logall.txt

yourscript.cmd 대신 debug.cmd를 예약합니다.


10

cmd.exe명령 프로세서를 사용 하여 예약 된 작업의 출력을 기록 할 타임 스탬프 파일 이름을 만듭니다.

여기에서 다른 사람의 답변을 기반으로 파일 이름에 날짜 및 / 또는 시간이 포함 된 출력 파일을 만들 수 있습니다. cmd.exe명령 프로세서를 사용하여 이를 수행 할 수 있습니다.

참고 : 이 기술은 내부 Windows 환경 변수의 문자열 출력을 가져와 문자 위치에 따라 분할합니다. 이로 인해 아래 예제에 제공된 정확한 값이 사용하는 Windows 지역에 맞지 않을 수 있습니다. 또한 일부 지역 설정의 경우 날짜 또는 시간의 일부 구성 요소는 값이 10 미만일 때 생성 된 파일 이름에 공백을 도입 할 수 있습니다.이 문제를 완화하려면 파일 이름을 따옴표로 묶어서 파일에 의도하지 않은 공백이 없도록하십시오. name은 생성중인 명령 줄을 깨지 않습니다. 상황에 가장 적합한 것을 실험하고 찾으십시오.

그주의 PowerShell보다 더 강력하다 cmd.exe. 더 강력한 한 가지 방법은 다른 Windows 지역을 처리 할 수 ​​있다는 것입니다. 그러나이 대답은 사용하여이 문제를 해결하는 것입니다 cmd.exe,하지 PowerShell, 그래서 우리는 계속한다.

사용 cmd.exe

다음과 같은 방법으로 날짜와 시간의 다른 구성 요소에 액세스 할 수 있습니다 슬라이스 내부 환경 변수를 %date%하고 %time%다음과 같이 (다시, 정확한 슬라이스 값은 Windows에서 구성이 지역에 따라 달라집니다) :

  • 연도 (4 자리) : %date:~10,4%
  • 월 (2 자리) : %date:~4,2%
  • 요일 (2 자리) : %date:~7,2%
  • 시간 (2 자리) : %time:~0,2%
  • 분 (2 자리) : %time:~3,2%
  • 초 (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"

모두 함께 퍼팅 모두 리디렉션 stdoutstderr현재 날짜와 시간라는 이름의 로그 파일에 스크립트에서이 사용은 명령 행으로 다음을 사용할 수 있습니다 :

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

가 더 적은 10 시간 이상에 앞에 0이 없습니다 : /하지 않도록 수정하지만 적어도 파일 이름을 인용하는 방법
user25064

9

다음과 같이 출력하려는 ​​행에 로그 파일에 쓸 수 있습니다.

@echo off
echo Debugging started >C:\logfile.txt
echo More stuff
echo Debugging stuff >>C:\logfile.txt
echo Hope this helps! >>C:\logfile.txt

이런 식으로 모든 것을 트롤링하고 싶지 않은 경우 출력 할 명령을 선택할 수 있습니다. 는 >지정된 파일로 출력합니다 (존재하지 않는 경우 파일을 만들고있는 경우 덮어 쓰기). 는 >>지정된 파일에 추가됩니다 (파일이없는 경우 생성하고있는 경우 내용에 추가).


1

프로그램을 실행하고 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큰 따옴표로 묶고 그 안에 평소와 같이 큰 따옴표를 사용하는 것입니다. 또한 날짜는 로케일에 따라 다르며이 예제는 미국 로케일을 사용하여 작동합니다.


0

이 스 니펫은 wmic.exe를 사용하여 날짜 문자열을 작성합니다. 로케일 설정에 의해 왜곡되지 않습니다.

rem DATE as YYYY-MM-DD via WMIC.EXE
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set datetime=%%I
set RDATE=%datetime:~0,4%-%datetime:~4,2%-%datetime:~6,2% 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.