Reindirizzamento dell'output su un argomento della riga di comando di un altro comando in Windows

StackOverflow https://stackoverflow.com/questions/1425807

  •  07-07-2019
  •  | 
  •  

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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top