Windows 에서 실행하는 명령 또는 일괄 작업의 동작을 기록하고 문제를 해결하는 가장 유용한 방법 중 하나는 출력을 파일로 리디렉션하는 것입니다.
그러나 명령줄 쓰기를 파일로 리디렉션할 수 있는 몇 가지 다른 방법이 있습니다. 선택하는 옵션은 명령 출력을 보는 방법에 따라 다릅니다.
Windows 명령 프롬프트 출력 작동 방식(How Windows Command Prompt Output Works)
Windows 콘솔( 명령 프롬프트(command prompt) )에 명령을 입력하면 해당 명령의 출력이 두 개의 별도 스트림으로 이동합니다.
- STDOUT : 표준 출력(Out) 은 명령의 표준 응답이 가는 곳입니다. 예를 들어, DIR 명령에 대한 표준 응답은 디렉토리 내의 파일 목록입니다.
- STDERR : 표준 오류(Standard Error) 는 명령에 문제가 있는 경우 오류 메시지가 표시되는 위치입니다. 예를 들어 디렉토리에 파일이 없는 경우 DIR 명령은 표준 오류(Standard Error) 스트림 에 " 파일(File) 을 찾을 수 없음"을 출력합니다.
이러한 출력 스트림 모두에 대해 출력 을 Windows 의 파일로 리디렉션할 수 있습니다 .
표준 출력 쓰기를 새 파일로 리디렉션(Redirect Standard Output Write to New File)
명령의 표준 출력을 파일로 리디렉션하는 방법에는 두 가지가 있습니다. 첫 번째는 명령을 실행할 때마다 명령 출력 쓰기를 새 파일로 보내는 것입니다.
이렇게 하려면 명령 프롬프트를 열고 다음을 입력합니다.
dir test.exe > myoutput.txt
> 문자는 콘솔에 제공한 이름의 파일에 STDOUT 을 출력하도록 지시합니다.(STDOUT)
이 명령(run this command) 을 실행 하면 파일이 존재하지 않는다는 오류를 제외하고 명령 창에 응답이 없음을 알 수 있습니다.
이는 명령에 대한 표준 출력이 myoutput.txt라는 파일로 리디렉션되었기 때문입니다. 이제 파일은 명령을 실행한 동일한 디렉토리에 있습니다. 표준 오류 출력은 여전히 정상적으로 표시됩니다.
참고(Note) : 명령을 실행하기 전에 명령 프롬프트 의 활성 디렉토리를 변경하도록 주의하십시오. (change the active directory)이렇게 하면 출력 파일이 저장된 위치를 알 수 있습니다.
명령 창에 "myoutput.txt"를 입력하여 파일로 이동한 표준 출력을 볼 수 있습니다. 그러면 기본 텍스트 파일 뷰어에서 텍스트 파일이 열립니다. 대부분의 사람들에게 이것은 일반적으로 Notepad.exe 입니다.
다음에 동일한 명령을 실행하면 이전 출력 파일이 삭제됩니다. 최신 명령의 출력으로 새 출력 파일이 다시 생성됩니다.
표준 출력(Standard Output) 쓰기를 동일한 파일(Same File) 로 리디렉션
같은 파일을 덮어쓰지 않으려면 어떻게 합니까? 또 다른 옵션은 > 대신 >>을 사용하여 출력 파일로 리디렉션하는 것입니다. 이 예의 경우 다음을 입력합니다.
dir test.exe >> myoutput.txt
동일한 출력이 표시됩니다(오류만 해당).
그러나 이 경우 출력 파일을 덮어쓰는 대신 이 명령은 새 출력을 기존 출력 파일에 추가합니다.
명령을 실행하고 출력을 파일에 추가할 때마다 기존 파일 끝에 새 표준 출력이 기록됩니다.
표준 오류를 파일로 리디렉션(Redirect Standard Error To a File)
표준 출력 쓰기를 파일로 리디렉션할 수 있는 것과 같은 방법으로 표준 오류 스트림을 파일로 출력할 수도 있습니다.
이렇게 하려면 명령 끝에 2> 를 추가한 다음 생성하려는 출력 오류 파일을 추가해야 합니다.
이 예에서는 다음 명령을 입력합니다.
dir test.exe > myoutput.txt 2> output.err
이것은 표준 출력 스트림을 myoutput.txt로 보내고 표준 오류 스트림을 output.err로 보냅니다. 결과는 콘솔 창에 출력 스트림이 전혀 표시되지 않는다는 것입니다.
그러나 output.err(output.err) 을 입력하면 오류 메시지를 볼 수 있습니다 . 그러면 기본 텍스트 파일 뷰어에서 파일이 열립니다.
보시다시피, 명령의 모든 오류 메시지는 오류 파일에 출력됩니다. 표준 출력과 마찬가지로 (Just)>> 를 대신 사용하여 이전에 실행한 명령의 오류에 오류를 추가할 수 있습니다.
모든 출력 쓰기를 동일한 파일로 리디렉션(Redirect All Output Writes to a Same File)
위의 모든 접근 방식은 여러 파일을 생성합니다. 한 파일은 표준 출력 스트림용이고 다른 파일은 표준 오류 스트림용입니다.
이 두 출력을 동일한 파일에 포함하려는 경우에도 그렇게 할 수 있습니다. 이렇게 하려면 다음 명령을 사용하여 모든 출력을 동일한 파일로 리디렉션하기만 하면 됩니다.
dir test.exe 1> myoutput.txt 2>&1
이 명령의 작동 방식은 다음과 같습니다.
- 표준 출력은 출력 번호 1로 식별되는 출력 파일로 지정됩니다.
- 숫자 2로 식별되는 표준 오류 출력은 숫자 1로 식별되는 출력 파일로 리디렉션됩니다.
이것은 표준 출력의 끝에 오류 출력을 추가합니다.
이것은 하나의 파일에서 모든 명령에 대한 모든 출력을 볼 수 있는 유용한 방법입니다.
표준 또는 오류 출력 스트림 침묵(Silencing Standard or Error Output Streams)
출력을 파일 대신 NUL 로 리디렉션하여 표준 출력(Standard Output) 또는 표준 오류(Standard Error) 를 끌 수도 있습니다 .
위의 예를 사용하여 표준 출력(Standard Output) 만 원하고 표준 오류(Standard Error) 가 전혀 필요하지 않은 경우 다음 명령을 사용할 수 있습니다.
dir test.exe 1> myoutput.txt 2>nul
이렇게 하면 표준 출력(Standard Output) 만 리디렉션한 위의 첫 번째 예제와 동일한 출력 파일이 생성 되지만 이 명령을 사용하면 콘솔 내부에 오류가 에코되지 않습니다. 오류 로그 파일도 생성하지 않습니다.
이것은 오류에 대해 신경쓰지 않고 성가신 것이 되기를 원하지 않는 경우에 유용합니다.
BAT 파일 내부에서(inside a BAT file) 위의 동일한 출력 명령을 수행할 수 있으며 해당 행의 출력은 지정한 출력 파일로 이동합니다. 이것은 BAT(BAT) 파일 내의 명령 이 실행을 시도할 때 오류가 있었는지 여부를 확인하는 유용한 방법입니다.
Redirect Output from the Windows Command Line to a Text File
One of the most useful ways to log and troubleshoot the behavior of commandѕ or batch jobs that you run on Wіndows is to redirect outрut to a file.
However, there are a few different ways you can redirect command line writes to a file. The option you choose depends on how you want to view your command output.
How Windows Command Prompt Output Works
When you type a command in the Windows console (command prompt), the output from that command goes to two separate streams.
- STDOUT: Standard Out is where any standard responses from commands go. For example the standard response for the DIR command is a list of files inside a directory.
- STDERR: Standard Error is where any error messages go if there’s a problem with the command. For example if there aren’t any files in the directory, the DIR command will output “File Not Found” to the Standard Error stream.
You can redirect output to a file in Windows for both of these output streams.
Redirect Standard Output Write to New File
There are two ways you can redirect standard output of a command to a file. The first is to send the command output write to a new file every time you run the command.
To do this, open the command prompt and type:
dir test.exe > myoutput.txt
The > character tells the console to output STDOUT to the file with the name you’ve provided.
When you run this command, you’ll notice that there isn’t any response in the command window except the error that the file doesn’t exist.
This is because the standard output for the command was redirected to a file called myoutput.txt. The file now exists in the same directory where you ran the command. The standard error output still displays as it normally does.
Note: Be careful to change the active directory for the command prompt before running the command. This way you’ll know where the output files are stored.
You can view the standard output that went to the file by typing “myoutput.txt” in the command window. This will open the text file in your default text file viewer. For most people, this is usually Notepad.exe.
The next time you run the same command, the previous output file will be deleted. A new output file will be recreated with the latest command’s output.
Redirect Standard Output Writes to the Same File
What if you don’t want to overwrite the same file? Another option is to use >> rather than > to redirect to an output file. In the case of this example, you would type:
dir test.exe >> myoutput.txt
You’ll see the same output (the error only).
But in this case, instead of overwriting the output file, this command appends the new output to the existing output file.
Every time you run a command and append the output to a file, it’ll write the new standard output to the end of the existing file.
Redirect Standard Error To a File
The same way you can redirect standard output writes to a file, you can also output the standard error stream to a file.
To do this, you’ll need to add 2> to the end of the command, followed by the output error file you want to create.
In this example, you’ll type the command:
dir test.exe > myoutput.txt 2> output.err
This sends the standard output stream to myoutput.txt, and the standard error stream to output.err. The result is that no output stream at all gets displayed in the console window.
However, you can see the error messages by typing output.err. This will open the file in your default text file viewer.
As you can see, any error messages from the command are output to the error file. Just as with the standard output, you can use >> instead to append the error to errors from previously run commands.
Redirect All Output Writes to a Same File
All of the approaches above result in multiple files. One file is for the standard output stream and the other is for the standard error stream.
If you want to include both of these outputs to the same file, you can do that too. To do this, you just need to redirect all output to the same file using the following command.
dir test.exe 1> myoutput.txt 2>&1
Here’s how this command works:
- The standard output is directed to the output file identified by output number 1.
- The standard error output identified by the number 2 is redirected to the output file identified by number 1.
This will append the error output to the end of the standard output.
This is a useful way to see all output for any command in one file.
Silencing Standard or Error Output Streams
You can also turn off either Standard Output or Standard Error by redirecting the output to a NUL instead of a file.
Using the example above, if you only want Standard Output and no Standard Error at all, you can use the following command:
dir test.exe 1> myoutput.txt 2>nul
This will result in the same output file as the first example above where you only redirected the Standard Output, but with this command the error won’t echo inside the console. It won’t create an error log file either.
This is useful if you don’t care about any errors and don’t want them to become a nuisance.
You can perform any of the same output commands above from inside a BAT file and the output from that line will go to the output file you specify. This is a useful way to see whether any commands within a BAT file had any errors when they tried to run.