Omdirigere utgang til en kommandolinje argument for en annen kommando i Windows

stemmer
5

Hvordan kan jeg, i Windows, kan du bruke resultatet av et script / kommando som et argument for en annen script? (Et rør | vil ikke fungere her, siden den andre skriptet ikke lese fra standard input)

For å klargjøre: Jeg har AnotherScript som trenger et argument arg, for eksempel:

AnotherScript 12

nå vil jeg argumentet (12 i eksempelet) til å komme fra produksjonen av et manus, kaller det ScriptB. Så jeg vil gjerne noe langs linjene av

AnotherScript (ScriptB)

Den AnotherScript er faktisk en python script som krever et argument, og ScriptB er en cygwin bash script som produserer noen tall, slik at måten jeg ønsker å bruke det er noe sånt som:

c:\Python26\python.exe AnotherScript (c:\cygwin|bin|bash --login -i ./ScriptB)

Takk for svarene. Men gitt den møysommelige 'for' konstruere nødvendig, har jeg omskrevet AnotherScript å lese fra standard input. Det virker som en bedre løsning.

Publisert på 15/09/2009 klokken 08:05
kilden bruker
På andre språk...                            


4 svar

stemmer
1

Lagre dataene i en midlertidig fil?

eller bruke en navngitt rør i stedet for et rør på standard i og utgang.

eller ring andre script fra den første, og overføre data via kommando argumenter

Svarte 15/09/2009 kl. 08:14
kilden bruker

stemmer
8

Merk: Alt dette krever kommandoene til å være i en batch-fil. Derav den doble %tegn.

Du kan bruke forkommandoen for å fange utgangen av kommandoen:

for /f "usebackq delims=" %%x in (`ScriptB`) do set args=%%x

så kan du bruke denne produksjonen i en annen kommando:

AnotherScript %args%

Dette vil føre til %args%å inneholde den siste linjen fra ScriptB's-utgang, skjønt. Hvis det bare returnerer en enkelt linje kan du rulle inn en linje:

for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x

Når den brukes utenfor en batch-fil du må bruke %xi stedet for %%x.

Men hvis ScriptBreturnerer mer enn én linje, AnotherScriptgår for hver av disse linjene. Du kan omgå dette-men bare innenfor en batch-fil-ved å bryte etter første sløyfe iterasjon:

for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x & goto :eof
Svarte 15/09/2009 kl. 08:21
kilden bruker

stemmer
3

Du kan spare utgangen av første manuset til en miljøvariabel og bruke innholdet som kommandolinje parameter til andre script, hvis det er det du ønsker.

Noe sånt som dette:

for /f "delims=" %a in ('first_script.cmd') do @set ouput=%a
second_script %ouput%
Svarte 15/09/2009 kl. 08:24
kilden bruker

stemmer
0

Er du ikke gjør ting mye mer komplisert enn nødvendig?

Ring AnotherScript fra bash. Der det er nødvendig, installere Cygwin bare så du kan gjøre dette.

Svarte 15/09/2009 kl. 10:25
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more