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

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

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



답변

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

cmd /c yourscript.cmd > logall.txt


답변

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

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


답변

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

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

프로그램 / 스크립트 : cmd

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


답변

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

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


답변

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

yourscript.cmd > logall.txt

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


답변

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


답변

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

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

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