Computer >> 컴퓨터 >  >> 소프트웨어 >> 소프트웨어

Windows 명령 프롬프트에서 텍스트 파일로 출력 리디렉션하는 방법

Windows에서 실행하는 명령이나 배치 작업의 동작을 기록하고 문제를 해결하는 가장 유용한 방법 중 하나는 출력을 파일로 리디렉션하는 것입니다.

다만 명령줄 출력을 파일로 리디렉션하는 방법은 여러 가지가 있으며, 어떤 옵션을 선택할지는 명령 출력을 어떤 방식으로 확인하고 싶은지에 따라 달라집니다.

Windows 명령 프롬프트 출력의 작동 방식

Windows 콘솔(명령 프롬프트)에서 명령을 입력하면 해당 명령의 출력은 두 개의 별도 스트림으로 전송됩니다.

  • STDOUT: 표준 출력은 명령의 일반적인 응답이 전송되는 곳입니다. 예를 들어 DIR 명령의 표준 응답은 디렉터리 내 파일 목록입니다.
  • STDERR: 표준 오류는 명령에 문제가 있을 때 오류 메시지가 전송되는 곳입니다. 예를 들어 디렉터리에 파일이 없으면 DIR 명령은 'File Not Found'라는 메시지를 표준 오류 스트림으로 출력합니다.

Windows에서는 이 두 출력 스트림 모두 파일로 리디렉션할 수 있습니다.

표준 출력을 새 파일로 리디렉션

명령의 표준 출력을 파일로 리디렉션하는 방법에는 두 가지가 있습니다. 첫 번째는 명령을 실행할 때마다 출력을 새 파일로 보내는 방식입니다.

이렇게 하려면 명령 프롬프트를 열고 다음과 같이 입력합니다.

dir test.exe > myoutput.txt

'>' 문자는 콘솔에게 STDOUT을 지정한 이름의 파일로 출력하라고 지시하는 역할을 합니다.

이 명령을 실행하면 파일이 존재하지 않는다는 오류를 제외하고는 명령 창에 아무런 응답이 표시되지 않는 것을 확인할 수 있습니다.

이는 명령의 표준 출력이 myoutput.txt라는 파일로 리디렉션되었기 때문입니다. 이 파일은 명령을 실행한 동일한 디렉터리에 생성되며, 표준 오류 출력은 여전히 평소처럼 화면에 표시됩니다.

참고: 명령을 실행하기 전에 명령 프롬프트의 활성 디렉터리를 먼저 변경하는 것이 좋습니다. 이렇게 하면 출력 파일이 어디에 저장되는지 쉽게 파악할 수 있습니다.

명령 창에 'myoutput.txt'를 입력하면 파일에 저장된 표준 출력을 확인할 수 있습니다. 그러면 기본 텍스트 편집기(대부분의 경우 메모장)에서 해당 텍스트 파일이 열립니다.

다음에 동일한 명령을 다시 실행하면 이전 출력 파일은 삭제되고, 최신 명령의 출력으로 새 출력 파일이 다시 생성됩니다.

표준 출력을 기존 파일에 추가하기

동일한 파일을 매번 덮어쓰고 싶지 않다면 어떻게 해야 할까요? 이때는 '>' 대신 '>>'를 사용하여 출력 파일로 리디렉션하면 됩니다. 위 예제의 경우 다음과 같이 입력합니다.

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(배치) 파일 내부에서도 동일하게 사용할 수 있으며, 해당 줄의 출력은 지정한 출력 파일로 전송됩니다. 이를 활용하면 배치 파일 내의 명령이 실행될 때 오류가 발생했는지 손쉽게 확인할 수 있습니다.