2009-09-15 10 views
5

Come posso, in Windows, utilizzare l'output di uno script/comando come argomento per un altro script? (Un tubo | non funziona qui, dato che altro script non legge dallo standard input)Reindirizzamento dell'output a un argomento della riga di comando di un altro comando in Windows

Troppo chiarire: ho AnotherScript che ha bisogno di un argomento arg, ad esempio:

AnotherScript 12 

ora vuoi che l'argomento (12 nell'esempio) provenga dall'output di uno script, chiamalo ScriptB. Quindi vorrei qualcosa sulla falsariga di

AnotherScript (ScriptB) 

L'AnotherScript è in realtà uno script python che richiede un argomento, e ScriptB è uno script cygwin bash che produce qualche numero, quindi il modo vorrei usarlo è qualcosa come:

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

Grazie per le risposte. Tuttavia, dato il laborioso costrutto "per" richiesto, ho riscritto AnotherScript per leggere dallo standard input. Sembra una soluzione migliore.

+0

Ci aiuterebbe se ci dite cosa legge l '"altro script" * da allora, se non lo standard input. – Amber

risposta

8

Nota: Tutto questo richiede i comandi di essere in un file batch. Da qui i doppi segni %.

È possibile utilizzare il comando for per catturare l'output del comando:

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

quindi è possibile utilizzare che la produzione in un altro comando:

AnotherScript %args% 

Questo farà sì che %args% per contenere l'ultima linea dall'uscita di ScriptB, però. Se si restituisce solo una singola linea si può rotolare questo in una sola riga:

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

Quando viene utilizzato al di fuori di un file batch è necessario utilizzare %x invece di %%x.

Tuttavia, se ScriptB restituisce più di una riga, AnotherScript viene eseguito per ciascuna di tali linee. È possibile aggirare questo, anche se solo all'interno di un batch di file-rompendo dopo il primo ciclo di iterazione:

for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x & goto :eof 
+0

Stavo per pubblicare la stessa risposta. Mi hai battuto! :) – Paulius

+0

Dovrei lavorare, non uscire da SO :-) – Joey

+0

Per l'utilizzo di file non batch e se si desidera eseguire il secondo script su ogni riga, il seguente comando 'cmd/v: on' quindi 'for/f" delim = "% x in ('findstr string files_eg * .csv') do (imposta y =% x e imposta z =! y :: = ,! & echo! z!) >> results.txt '(sostituisce i due punti con le virgole) – mpag

1

Salvare i dati in un file temporaneo?

oppure utilizzare una pipe denominata anziché una pipe sullo standard in e output.

oppure chiamare l'altro script dal primo e trasferire i dati attraverso argomenti del comando

3

Si potrebbe salvare l'output del vostro primo script per una variabile di ambiente e l'utilizzo del suo contenuto come parametro di riga di comando per il secondo script, se è quello che vuoi.

Qualcosa di simile a questo: non

for /f "delims=" %a in ('first_script.cmd') do @set ouput=%a 
second_script %ouput% 
0

State facendo le cose molto più complicate del necessario?

Chiama AnotherScript da bash. Se necessario, installa Cygwin solo così puoi farlo.

+0

Il problema è (era) che AnotherScript ha bisogno di un argomento e che questo argomento è il valore di ritorno di scriptB. – Rabarberski

+5

scriptB | xargs AnotherScript – reinierpost

Problemi correlati