Reindirizzamento dell'output su un argomento della riga di comando di un altro comando in Windows
Domanda
Come posso, in Windows, utilizzare l'output di uno script / comando come argomento per un altro script? (Una pipe | non funzionerà qui, poiché quell'altro script non legge dallo standard input)
Troppo chiaro: ho AnotherScript che ha bisogno di un argomento arg, ad esempio:
AnotherScript 12
ora voglio che l'argomento (12 nell'esempio) provenga dall'output di uno script, chiamalo ScriptB. Quindi vorrei qualcosa sulla falsariga di
AnotherScript (ScriptB)
AnotherScript è in realtà uno script Python che richiede un argomento, e ScriptB è uno script cygwin bash che produce un numero, quindi il modo in cui vorrei usarlo è qualcosa del tipo:
c:\Python26\python.exe AnotherScript (c:\cygwin|bin|bash --login -i ./ScriptB)
Grazie per le risposte. Tuttavia, dato il laborioso costrutto "for" richiesto, ho riscritto AnotherScript per leggere dallo standard input. Sembra una soluzione migliore.
Soluzione
Nota: tutto ciò richiede che i comandi siano in un file batch. Da qui i doppi segni %
.
È possibile utilizzare il comando for
per acquisire l'output del comando:
for /f "usebackq delims=" %%x in (`ScriptB`) do set args=%%x
quindi puoi usare quell'output in un altro comando:
AnotherScript %args%
Questo farà sì che % args%
contenga l'ultima riga dell'output di ScriptB
. Se restituisce solo una singola riga, puoi inserirlo in una sola riga:
for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x
Se utilizzato all'esterno di un file batch è necessario utilizzare % x
anziché %% x
.
Tuttavia, se ScriptB
restituisce più di una riga, AnotherScript
viene eseguito per ciascuna di quelle righe. Puoi aggirare questo & # 8212; sebbene solo all'interno di un file batch & # 8212; rompendo dopo la prima iterazione del ciclo:
for /f "usebackq delims=" %%x in (`ScriptB`) do AnotherScript %%x & goto :eof
Altri suggerimenti
Puoi salvare l'output del tuo primo script in una variabile di ambiente e utilizzarne il contenuto come parametro della riga di comando nel secondo script, se è quello che desideri.
Qualcosa del genere:
for /f "delims=" %a in ('first_script.cmd') do @set ouput=%a
second_script %ouput%
Salvare i dati in un file temporaneo?
o usa una pipe con nome invece di una pipe sullo standard in e output.
o chiama l'altro script dal primo e trasferisci i dati tramite argomenti di comando
Non stai rendendo le cose molto più complicate del necessario?
Chiama un altro script da bash. Se necessario, installare Cygwin solo per poterlo fare.