Cuando trabajo con Bash, puedo poner la salida de un comando en otro comando así:
my_command `echo Test`
sería lo mismo que
my_command Test
(Obviamente, este es solo un ejemplo no práctico).
Me pregunto si puedes hacer lo mismo en Batch.
Cuando trabajo con Bash, puedo poner la salida de un comando en otro comando así:
my_command `echo Test`
sería lo mismo que
my_command Test
(Obviamente, este es solo un ejemplo no práctico).
Me pregunto si puedes hacer lo mismo en Batch.
Respuestas:
Puede hacerlo redirigiendo la salida a un archivo primero. Por ejemplo:
echo zz > bla.txt
set /p VV=<bla.txt
echo %VV%
for /f
variante es mucho mejor.
%random%
Puede obtener una funcionalidad similar usando scripts cmd.exe con el for /f
comando:
for /f "usebackq tokens=*" %%a in (`echo Test`) do my_command %%a
Sí, no es un poco obvio (por decir lo menos), pero es lo que hay.
Consulte for /?
los detalles sangrientos.
Nota al margen: Pensé que para usar " echo
" dentro de las comillas inversas en un for /f
comando " " tendría que hacerse usando " cmd.exe /c echo Test
" ya que echo
es un comando interno de cmd.exe
, pero funciona de una manera más natural. Los scripts por lotes de Windows siempre me sorprenden de alguna manera (pero generalmente no en el buen sentido).
system()
estaba bien, iirc, ya que inicia un shell en cualquier caso, pero .NET Process.Start
necesita invocar explícitamente el shell. Algo así, iirc. En cualquier caso, considero que esta es la mejor respuesta que la aceptada :-)
for
no lastimar pero confundir el problema. ¿Qué hay de esto?for /f %%a in ('"echo Test"') do my_command %%a
tokens=*
es importante. De lo contrario, si el resultado del comando incluye espacios, solo se emite la primera palabra. Ejecutar este en el símbolo: for /f %a in ('"echo foo bar"') do echo "%a"
. Se imprimirá "foo"
.
Lea la documentación del comando "for": for /?
Lamentablemente, no he iniciado sesión en Windows para verificarlo yo mismo, pero creo que algo como esto puede aproximarse a lo que desea:
for /F %i in ('echo Test') do my_command %i
Siempre puedes ejecutar Bash dentro de Windows. Lo hago todo el tiempo con MSYS (mucho más eficiente que Cygwin ).
Quizás estoy arruinando la sintaxis del for /f
método estándar , pero cuando pongo un comando muy complejo que involucra && y | dentro de las comillas invertidas en el límite del for /f
, causa problemas. Es posible una ligera modificación de lo habitual para manejar un comando de complejidad arbitraria:
SET VV=some_command -many -arguments && another_command -requiring -the-other -command | handling_of_output | more_handling
for /f "usebackq tokens=*" %%a in (`%VV%`) do mycommand %%a
Al poner su comando completo y complejo en una variable primero, luego poner una referencia a la variable en el límite en lugar de colocar el comando complejo directamente en el límite del bucle for, puede evitar problemas de interpretación de sintaxis. Actualmente, si copio el comando exacto que configuré en la VV
variable en el ejemplo anterior en donde se usa, %VV%
causa errores de sintaxis.