Windows에서 다른 명령의 명령줄 인수로 출력 리디렉션
문제
Windows에서 스크립트/명령의 출력을 다른 스크립트의 인수로 어떻게 사용할 수 있습니까?(파이프 |는 다른 스크립트가 표준 입력에서 읽지 않기 때문에 여기서는 작동하지 않습니다)
너무 명확하게 설명:인수 인수가 필요한 AnotherScript가 있습니다. 예:
AnotherScript 12
이제 인수(예제에서는 12)가 스크립트 출력에서 나오도록 하고 이를 ScriptB라고 부릅니다.그래서 나는 다음과 같은 내용을 원합니다.
AnotherScript (ScriptB)
AnotherScript는 실제로 인수가 필요한 Python 스크립트이고 ScriptB는 숫자를 생성하는 cygwin bash 스크립트이므로 사용 방법은 다음과 같습니다.
c:\Python26\python.exe AnotherScript (c:\cygwin|bin|bash --login -i ./ScriptB)
답변해주셔서 감사합니다.그러나 힘든 'for' 구성이 필요하다는 점을 고려하여 표준 입력에서 읽을 수 있도록 AnotherScript를 다시 작성했습니다.그게 더 나은 해결책인 것 같습니다.
해결책
메모:이 모든 작업에는 명령이 배치 파일에 있어야 합니다.따라서 이중 %
표지판.
당신은 사용할 수 있습니다 for
명령의 출력을 캡처하는 명령:
for /f "usebackq delims=" %%x in (`ScriptB`) do set args=%%x
그런 다음 해당 출력을 다른 명령에서 사용할 수 있습니다.
AnotherScript %args%
이로 인해 %args%
마지막 줄을 포함하려면 ScriptB
하지만 의 출력.한 줄만 반환하는 경우 이를 한 줄로 묶을 수 있습니다.
for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x
배치 파일 외부에서 사용할 때는 다음을 사용해야 합니다. %x
대신에 %%x
.
그러나 만일 ScriptB
두 줄 이상을 반환합니다. AnotherScript
각 라인마다 실행됩니다.첫 번째 루프 반복 후 중단하여 배치 파일 내에서만 이를 피할 수 있습니다.
for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x & goto :eof
다른 팁
원하는 경우 첫 번째 스크립트의 출력을 환경 변수에 저장하고 해당 내용을 두 번째 스크립트의 명령줄 매개변수로 사용할 수 있습니다.
이 같은:
for /f "delims=" %a in ('first_script.cmd') do @set ouput=%a
second_script %ouput%
데이터를 임시 파일에 저장하시겠습니까?
또는 표준 입력 및 출력에 파이프 대신 명명된 파이프를 사용합니다.
또는 첫 번째 스크립트에서 다른 스크립트를 호출하고 명령 인수를 통해 데이터를 전송합니다.
필요 이상으로 일을 복잡하게 만들고 있지 않습니까?
Bash에서 AnotherScript를 호출합니다.필요한 경우 이를 수행할 수 있도록 Cygwin을 설치하십시오.