Windows 명령줄

Windows 명령줄

일부 매개변수를 사용하여 출력을 생성하는 exe가 있고 해당 출력에서 ​​정수 부분을 아래와 같은 파일에 저장하려고 합니다.

C:\MyExe -paramo/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

관련 정보