일부 매개변수를 사용하여 출력을 생성하는 exe가 있고 해당 출력에서 정수 부분을 아래와 같은 파일에 저장하려고 합니다.
C:\MyExe -param
o/p 를 제공 123abc
하므로 123
파일에 저장해야 합니다. Windows 명령줄을 통해 이를 어떻게 달성할 수 있습니까?
답변1
이것은 dbenham의 답변만큼 우아하지는 않지만 순수한 Windows입니다. 프로그램의 출력이 항상 예제(숫자 바로 뒤에 소문자, 그 다음에 다른 내용이 나오는 일련의 숫자)와 같으면 다음과 같이 작동합니다.
for /f "delims=abcdefghijklmnopqrstuvwxyz" %x in ('C:\MyExe -param') do echo %x > out.txt
노트:
- 마지막 숫자 뒤에 소문자(공백 포함) 이외의 문자가 올 수 있는 경우 문자열에 가능한 모든 구분 기호 문자를 포함하십시오
delims=
. - 위 명령은 대화형 명령 프롬프트에 입력하면 작동합니다. 배치 파일(예: 명령 프롬프트 스크립트)에서 사용하려면 (두 경우 모두)
%x
로 변경합니다.%%x
위 명령은 하나 이상의 구분 문자가 포함된
echo %x > out.txt
출력의 각 줄에 대해 하위 명령을 한 번씩 실행합니다.C:\MyExe -param
프로그램이 해당 한 줄만 쓴다면 문제 없습니다. 프로그램에서 이러한 행을 여러 개 작성하는 경우, 예를 들어5gold rings 4calling birds 3french hens 2turtle doves 1partridge
매번 파일을 덮어쓰게 되며 마지막 값만 남게 됩니다. 모든 숫자를 캡처하려면 다음과 같이 괄호를 추가하세요.
(for /f "delims=abc…xyz" %x in ('C:\MyExe -param') do echo %x) > MyOutputFile.txt ↑ ↑
따라서 전체 명령( 까지
echo %x
)은 단일 명령으로 처리되며 리디렉션(>
)은 한 번만 발생합니다. 또는>
을 로 변경하면>>
출력이 누적됩니다(그러나 이전에 파일에 있던 모든 내용은 새 출력이 추가된 상태로 그대로 유지됩니다).
답변2
이는 순수 배치에서는 사소한 일이 아니지만,REPL.BAT - 하이브리드 JScript/배치 유틸리티이는 stdin에서 정규식 검색/교체를 수행하고 결과를 stdout에 기록합니다. XP 이후의 모든 최신 Windows 시스템에서 실행되는 순수한 스크립트입니다.
c:\myExe -param | repl "(\d*).*" $1 >out.txt