Pregunta

¿Cómo puedo, en Windows, usar la salida de un script / comando como argumento para otro script? (Una tubería | no funcionará aquí, ya que ese otro script no lee desde la entrada estándar)

Demasiado claro: tengo AnotherScript que necesita un argumento arg, por ejemplo:

AnotherScript 12

ahora quiero que el argumento (12 en el ejemplo) provenga de la salida de un script, llámelo ScriptB. Entonces me gustaría algo similar a

AnotherScript (ScriptB)

El AnotherScript es en realidad un script de python que requiere un argumento, y ScriptB es un script de cygwin bash que produce algún número, por lo que la forma en que me gustaría usarlo es algo así como:

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

Gracias por las respuestas. Sin embargo, dada la laboriosa construcción 'for' requerida, he reescrito AnotherScript para leer desde la entrada estándar. Esa parece ser una mejor solución.

¿Fue útil?

Solución

Nota: Todo esto requiere que los comandos estén en un archivo por lotes. De ahí los signos dobles % .

Puede usar el comando for para capturar la salida del comando:

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

entonces puede usar esa salida en otro comando:

AnotherScript %args%

Esto hará que % args% contenga la última línea de la salida de ScriptB . Si solo devuelve una sola línea, puede pasarla a una sola línea:

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

Cuando se usa fuera de un archivo por lotes, debe usar % x en lugar de %% x .

Sin embargo, si ScriptB devuelve más de una línea, AnotherScript se ejecuta para cada una de esas líneas. Puede eludir esto, aunque solo dentro de un archivo por lotes, rompiendo después de la primera iteración del bucle:

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

Otros consejos

Puede guardar el resultado de su primer script en una variable de entorno y usar su contenido como parámetro de línea de comando para el segundo script, si eso es lo que desea.

Algo como esto:

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

¿Guardar los datos en un archivo temporal?

o use una tubería con nombre en lugar de una tubería en la entrada y salida estándar.

o llame al otro script desde el primero y transfiera los datos mediante argumentos de comando

¿No estás haciendo las cosas mucho más complicadas de lo necesario?

Llama a AnotherScript desde bash. Cuando sea necesario, instale Cygwin para poder hacerlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top