사용중인 명령이 실패한 것으로 표시되지 않았습니다. 질문에 표시하면 해결책을 찾기가 더 쉬울 수 있습니다.
나는 당신의 명령이 다음과 같을 것으로 기대합니다 :
C:\>
foo.exe|c:\Program Files (x86)\something\test.txt
당신이 받고있는 오류는 약간의 단서입니다.
'c:/Program' is not recognized as an internal or external command, operable program or batch file.
먼저:
... is not recognized as an internal or external command, operable program or batch file.
일반적으로을 |
대신 하여 파일로 리디렉션하려고 할 때 발생 합니다 >
.
둘째:
'c:/Program' ...
공백이 포함 된 파일 이름 (또는 경로)을 지정할 때는 큰 따옴표 ( "..."
)로 묶어야합니다 . OS가 리디렉션 할 파일을 결정할 때 인용되지 않은 공간이 있으면 파일 이름 찾기를 중지하기 때문입니다 "c:/Program"
.
이 시도:
foo.exe>"c:\Program Files (x86)\something\test.txt"
위 foo.exe
의 방법으로 텍스트 파일 에서 출력을 캡처하지 못하면 다른 가능성이 있습니다 ...
프로그램 foo.exe
이 STDERR
대신 출력을 기록 하는 경우 단일 경로 재 지정을 사용하여 STDOUT
출력을 foo.exe
캡처하지 않습니다 >
. 다음과 같이해야합니다.
foo.exe>"c:\Program Files (x86)\something\test.txt" 2>&1
편집하다:
다음은 파일 리디렉션 및 2>&1
표기법에 대한 설명입니다 .
프로그램이 터미널에 쓸 때 둘 중 하나에 쓸 수 있습니다 Streams
.
스트림 1로 불린다 STDOUT
또는 표준 출력 . 일반적으로 프로그램은 "정상" 출력을 스트림 1에 씁니다 .
스트림 2는 불린다 STDERR
또는 표준 오류 . 일반적으로 프로그램은 "오류" 출력 (오류 및 경고 메시지)을 스트림 2에 씁니다 .
프로그램이 특정 출력을 작성하는지 STDOUT
또는 STDERR
프로그래머가 결정 하는지 여부와 프로그램 작성 방법. 일부 프로그램은 모든 출력 (정상 출력 및 오류)을로 보내도록 작성되었습니다 STDOUT
.
출력 경로 재 지정없이 프로그램을 실행하면 STDOUT
출력 또는 STDERR
출력 내용을 구분하지 않고 모든 정상 및 오류 출력이 터미널 화면으로 전송됩니다 .
다음과 같이 단일 "정상"리디렉션을 수행하는 >
경우 :
foo.exe > "c:\Program Files (x86)\something\test.txt"
파일로 리디렉션 되는 스트림을 지정하지 않았 으므로 스트림 1이 가정됩니다.
다음과 같이 입력 한 것과 같습니다.
foo.exe 1> "c:\Program Files (x86)\something\test.txt"
이것은 명령 인터프리터 ( cmd.exe
)에게 STDOUT
(스트림 1)에 대한 프로그램 출력을 지정된 파일 이름 으로 캡처하도록 지시합니다 . 1
에서이 1>
스트림 1을 의미합니다.
이 경우 모든 일반 프로그램이 파일로 캡처되지만 프로그램이 STDERR
(스트림 2)에 쓰면 해당 출력이 캡처되지 않고 화면에 표시됩니다. 일반적인 프로그램 출력을 캡처하는 동안 오류가 발생하면 화면에서 볼 수 있도록 일반적으로 "원하는"방법입니다.
"일반"출력을 하나의 파일로 캡처하고 "오류"출력을 다른 파일로 캡처하려면 다음과 같이하십시오.
foo.exe > "c:\output.txt" 2> "C:\error.txt"
or
foo.exe 1> "c:\output.txt" 2> "C:\error.txt"
"정상"출력과 "오류"출력을 동일한 파일 로 캡처하려면 다음 과 같이 지정할 수 있습니다.
foo.exe > "c:\output.txt" 2>&1
이것은 기본적으로이를 지정하는 "단축"방식이며 스트림 1을 지정된 파일로 리디렉션하고 스트림 2를 스트림 1과 동일한 "장소" (파일)로 리디렉션하는 것을 의미합니다 .
편집하다:
Pacerier는 물었다 :
foo.exe> "c : \ output.txt"2> & 1과 foo.exe> "c : \ output.txt"2> "c : \ output.txt"사이에 차이점이 있습니까? 그들은 동일합니까?
짧은 대답 : 당신은 그것들이 동일하다고 생각할 것입니다. 그들은 달라요.
리디렉션을 사용하여 >"filename.ext"
, 1>"filename.ext"
또는 2>"filename.ext"
의는 >
출력이 기록되도록 새로운 "여기서 filename.ext"라는 이름의 파일입니다. "filename.ext"파일이 이미 존재하면 먼저 삭제됩니다.
따라서 다음을 사용하십시오.
foo.exe> "c : \ output.txt"2> "c : \ output.txt"
두 경로 재 지정이 동일한 파일에 쓰려고하고 파일이 이미있는 경우 모두 삭제하려고하는 "충돌"이 발생합니다. 이로 인해 원하지 않는 동작이 발생할 수 있습니다. 일반적으로 출력 중 하나 또는 다른 하나 또는 둘 다가 완전히 또는 예측 가능하게 캡처되지 않습니다.
실제 결과는 운영 체제 및 버전에 따라 다르며 실행중인 명령에 따라 달라질 수도 있습니다. 일어날 것입니다 :
1 리디렉션 중 하나에 전송 된 출력이 캡처되거나 부분적으로 캡처되고 다른 리디렉션으로 전송 된 출력이 손실됩니다. 2 운영 체제가 명령에 대해 불평하고 출력이 캡처되지 않습니다 (완전히). 3 정의되지 않은 바람직하지 않은 예측할 수없는 동작.
Windows 7 및 Windows Vista / 8 / 10 및 가능하면 Windows XP에서 운영 체제가 명령에 대해 불평하고 명령이 취소됩니다.
예를 들어 (Windows 7) : 이름이 다음 "C:\Temp\emptyfolder"
과 같은 폴더가 있고 "nonexistantfile"이라는 파일이 없습니다.
C:\>cd "\Temp\emptyfolder"
C:\Temp\emptyfolder>dir nonexistantfile>output.txt
File Not Found
C:\Temp\emptyfolder>type output.txt
Volume in drive F is FFFFx1tb
Volume Serial Number is 4011-A5C6
Directory of C:\Temp\emptyfolder
C:\Temp\emptyfolder>
이 경우 하나의 리디렉션 ( >output.txt
)을 사용 하여 dir
명령 의 출력이 파일 :을 캡처 output.txt
하고 오류 메시지 File Not Found
가 화면에 표시됩니다. 이것은 예상 된 동작입니다.
이제 두 리디렉션 ( "> 파일"과 "2> 파일")을 모두 사용하십시오.
C:\Temp\emptyfolder>dir nonexistantfile>output.txt 2>output.txt
The process cannot access the file because it is being used by another process.
C:\Temp\emptyfolder>type output.txt
C:\Temp\emptyfolder>
이 경우 운영 체제에서 (outout) 파일이 이미 사용 중이라고 불평했습니다. 그리고 "output.txt"파일은 비워지고 (0 바이트) 두 경로 재 지정에 대한 출력이 손실됩니다.
마지막으로 두 가지 리디렉션 ( "> 파일"과 "2> & 1")을 사용하십시오.
C:\Temp\emptyfolder>dir nonexistantfile>output.txt 2>&1
C:\Temp\emptyfolder>type output.txt
Volume in drive C is CCCCCCCC
Volume Serial Number is 1234-ABCD
Directory of C:\Temp\emptyfolder
File Not Found
C:\Temp\emptyfolder>
이 경우 "> file"은 "stream 1"( "표준 출력")의 출력이 파일로 캡처되도록합니다. 그리고 "2> & 1"은 "스트림 2"( "오류 출력")에 대한 출력이 이미 리디렉션 된 "스트림 1"을 통해 전송되고 또한 동일한 파일로 캡처되도록합니다.
순서가 중요하다는 점도 주목할 가치가 있습니다. 이 순서를 반대로 :
dir nonexistant 2>&1 >output.txt
동일하지 않으며 아마도 원하는 결과를 얻지 못할 것입니다.
이 경우 먼저보고 세차 된 "2> & 1"은 "stream 2"( "error output")의 출력이 "stream 1"이 현재 지정된 위치로 리디렉션되도록합니다. moment는 화면 (기본값)입니다. "> file"은 "stream 1"( "표준 출력")의 출력이 파일로 캡처되도록합니다. 최종 결과는 명령의 출력 ( "스트림 1")이 파일로 캡처되지만 오류 출력 ( "스트림 2")은 여전히 파일이 아닌 화면으로 이동한다는 것입니다.