Windows에서 실행하는 명령 또는 일괄 작업의 동작을 기록하고 문제를 해결하는 가장 유용한 방법 중 하나는 출력을 파일로 리디렉션하는 것입니다.
그러나 명령줄 쓰기를 파일로 리디렉션할 수 있는 몇 가지 다른 방법이 있습니다. 선택하는 옵션은 명령 출력을 보는 방법에 따라 다릅니다.
Windows 명령 프롬프트 출력 작동 방식
Windows 콘솔(명령 프롬프트)에 명령을 입력하면 해당 명령의 출력이 두 개의 별도 스트림으로 이동합니다.
- STDOUT :표준 출력은 명령의 표준 응답이 가는 곳입니다. 예를 들어 DIR 명령에 대한 표준 응답은 디렉토리 내의 파일 목록입니다.
- STDERR :표준 오류는 명령에 문제가 있는 경우 오류 메시지가 표시되는 위치입니다. 예를 들어 디렉토리에 파일이 없는 경우 DIR 명령은 표준 오류 스트림에 "파일을 찾을 수 없음"을 출력합니다.
이러한 출력 스트림 모두에 대해 출력을 Windows의 파일로 리디렉션할 수 있습니다.
표준 출력 쓰기를 새 파일로 리디렉션
명령의 표준 출력을 파일로 리디렉션하는 방법에는 두 가지가 있습니다. 첫 번째는 명령을 실행할 때마다 명령 출력 write를 새 파일로 보내는 것입니다.
이렇게 하려면 명령 프롬프트를 열고 다음을 입력합니다.
dir test.exe > myoutput.txt
> 문자는 콘솔에 STDOUT을 출력하도록 지시합니다. 제공한 이름의 파일로 이동합니다.
이 명령을 실행하면 파일이 존재하지 않는다는 오류 외에는 명령 창에 응답이 없음을 알 수 있습니다.
이는 명령에 대한 표준 출력이 myoutput.txt라는 파일로 리디렉션되었기 때문입니다. 이제 파일은 명령을 실행한 동일한 디렉토리에 있습니다. 표준 오류 출력은 여전히 정상적으로 표시됩니다.
참고 :명령을 실행하기 전에 명령 프롬프트의 활성 디렉토리를 변경하도록 주의하십시오. 이렇게 하면 출력 파일이 저장된 위치를 알 수 있습니다.
명령 창에 "myoutput.txt"를 입력하여 파일로 이동한 표준 출력을 볼 수 있습니다. 그러면 기본 텍스트 파일 뷰어에서 텍스트 파일이 열립니다. 대부분의 사람들에게 이것은 일반적으로 Notepad.exe입니다.
다음에 동일한 명령을 실행하면 이전 출력 파일이 삭제됩니다. 최신 명령의 출력으로 새 출력 파일이 다시 생성됩니다.
표준 출력 쓰기를 동일한 파일로 리디렉션
같은 파일을 덮어쓰지 않으려면 어떻게 합니까? 또 다른 옵션은> 대신>>을 사용하여 출력 파일로 리디렉션하는 것입니다. 이 예의 경우 다음을 입력합니다.
dir test.exe >> myoutput.txt
동일한 출력이 표시됩니다(오류만 해당).
그러나 이 경우 이 명령은 출력 파일을 덮어쓰는 대신 기존 출력 파일에 새 출력을 추가합니다.
명령을 실행하고 출력을 파일에 추가할 때마다 기존 파일 끝에 새 표준 출력이 기록됩니다.
표준 오류를 파일로 리디렉션
표준 출력 쓰기를 파일로 리디렉션하는 것과 같은 방식으로 표준 오류 스트림을 파일로 출력할 수도 있습니다.
이렇게 하려면 2>를 추가해야 합니다. 명령 끝에 만들고자 하는 출력 오류 파일이 옵니다.
이 예에서는 다음 명령을 입력합니다.
dir test.exe > myoutput.txt 2> output.err
이것은 표준 출력 스트림을 myoutput.txt로 보내고 표준 오류 스트림을 output.err로 보냅니다. 결과는 콘솔 창에 출력 스트림이 전혀 표시되지 않는다는 것입니다.
그러나 output.err을 입력하면 오류 메시지를 볼 수 있습니다. . 그러면 기본 텍스트 파일 뷰어에서 파일이 열립니다.
보시다시피, 명령의 모든 오류 메시지는 오류 파일에 출력됩니다. 표준 출력과 마찬가지로 >>를 사용할 수 있습니다. 대신 이전에 실행한 명령의 오류에 오류를 추가합니다.
모든 출력 쓰기를 동일한 파일로 리디렉션
위의 모든 접근 방식은 여러 파일을 생성합니다. 하나의 파일은 표준 출력 스트림용이고 다른 하나는 표준 오류 스트림용입니다.
이 두 출력을 동일한 파일에 포함하려는 경우에도 그렇게 할 수 있습니다. 이렇게 하려면 다음 명령을 사용하여 모든 출력을 동일한 파일로 리디렉션하기만 하면 됩니다.
dir test.exe 1> myoutput.txt 2>&1
이 명령의 작동 방식은 다음과 같습니다.
- 표준 출력은 출력 번호 1로 식별되는 출력 파일로 지정됩니다.
- 숫자 2로 식별되는 표준 오류 출력은 숫자 1로 식별되는 출력 파일로 리디렉션됩니다.
이것은 표준 출력의 끝에 오류 출력을 추가합니다.
이것은 하나의 파일에서 모든 명령에 대한 모든 출력을 볼 수 있는 유용한 방법입니다.
표준 또는 오류 출력 스트림 묵음
출력을 파일 대신 NUL로 리디렉션하여 표준 출력 또는 표준 오류를 끌 수도 있습니다.
위의 예를 사용하여 표준 출력만 원하고 표준 오류는 전혀 원하지 않는 경우 다음 명령을 사용할 수 있습니다.
dir test.exe 1> myoutput.txt 2>nul
이렇게 하면 표준 출력만 리디렉션한 위의 첫 번째 예와 동일한 출력 파일이 생성되지만 이 명령을 사용하면 오류가 콘솔 내부에 에코되지 않습니다. 오류 로그 파일도 생성하지 않습니다.
이것은 오류에 신경 쓰지 않고 귀찮게 하지 않으려는 경우에 유용합니다.
BAT 파일 내부에서 위의 동일한 출력 명령을 수행할 수 있으며 해당 줄의 출력은 지정한 출력 파일로 이동합니다. 이것은 BAT 파일 내의 명령이 실행을 시도할 때 오류가 있었는지 여부를 확인하는 유용한 방법입니다.