Necesito asignar la salida de un programa a una variable usando un archivo por lotes MS.
Entonces, en GNU Bash shell, usaría VAR=$(application arg0 arg1)
. Necesito un comportamiento similar en Windows usando un archivo por lotes.
Algo así como set VAR=application arg0 arg1
.
batch-file
cmd
variable-assignment
windows-console
initialZero
fuente
fuente
for /f "tokens=3" %%i in ('route print ^| findstr "\<0.0.0.0\>"') do set "myVar=%%i"
Como una adición a esta respuesta anterior , las tuberías se pueden usar dentro de una declaración for, escapada por un símbolo de intercalación:
fuente
for /f "tokens=*" %i in ('tasklist ^| findstr explorer') do @echo %i
Pero, en general,usebackq
debe usarse para manejar comandos complejos.for /f "tokens=*" %%i in ('"tasklist | grep explorer"') do set VAR=%%i
. Más fácil para mí si no hay comillas en el comando en sí.@OP, puede usar bucles para capturar el estado de retorno de su programa, si genera algo distinto de números
fuente
suponiendo que la salida de su aplicación es un código de retorno numérico, puede hacer lo siguiente
fuente
Al ejecutar:
for /f %%i in ('application arg0 arg1') do set VAR=%%i
recibía un error: %% era inesperado en este momento. Como solución, tuve que ejecutar arriba comofor /f %i in ('application arg0 arg1') do set VAR=%i
fuente
%%
y fuera de un archivo por lotes en una línea de comando que necesita%
Además de la respuesta, no puede usar directamente operadores de redirección de salida en la parte establecida del
for
bucle (por ejemplo, si desea ocultar la salida de stderror de un usuario y proporcionar un mensaje de error más agradable). En cambio, debes escapar de ellos con un carácter de intercalación (^
):Referencia: Redirigir la salida del comando para el bucle del script por lotes
fuente
fuente
Puede usar una macro por lotes para capturar fácilmente las salidas de comandos, un poco como el comportamiento del shell bash.
El uso de la macro es simple y parece
Y funciona incluso con tuberías.
La macro usa la variable como una matriz y almacena cada línea en un índice separado.
En la muestra de
%$set% allDrives="wmic logicaldisk
allí se crearán las siguientes variables:Para usarlo, no es importante entender cómo funciona la macro en sí.
El ejemplo completo
fuente
Escribí el script que hace ping a google.com cada 5 segundos y registrando los resultados con la hora actual. Aquí puede encontrar la salida a las variables "commandLineStr" (con índices)
fuente