[BATCH] Guardar salida de comando a variable

Iniciado por ddffgg, 7 Febrero 2013, 09:46 AM

0 Miembros y 1 Visitante están viendo este tema.

ddffgg

Hola a todos,

Controlo más bien poco Batch y no veo la forma de poder guardar la salida de varios comandos concatenados con | a una variable.

Os pongo un ejemplo de lo que pretendo en sh:

Código (bash) [Seleccionar]
fichero=$(ls -1 | grep fichero_log | sort | tail -n 1)
tail -f $fichero


Que sería lo mismo que:

Código (bash) [Seleccionar]
tail -f `ls -1 | grep fichero_log | sort | tail -n 1`

Dispongo de los comandos tail.exe y grep.exe para facilitarme un poco la vida (y la sintaxis) a la hora de elaborar scripts en Batch. Lo único que me faltaría sería ver la forma de guardar la salida de los comandos con | en una variable.

Gracias de antemano!

Eleкtro

No puedes hacerlo diréctamente como en Bash.

Código (DOS) [Seleccionar]
For /F "Tokens=*" %%# in ('comando1 ^| comando2') Do (Set "Variable=%%#")

Aprende el uso del FOR /F, porque lo vas a necesitar.

Saludos








ddffgg

Muchas gracias por la ayuda! Ya veo que parece ser algo así como una navaja suiza.

Como nota, indicar que he tenido que usar un único "%" antes de "#" para que me funcionase. Uso Windows 7 Profesional 64 bits por si tuviese que ir.

Lo dicho, gracias por la ayuda; me lo anoto que a buen seguro tendré que usarlo muchas veces.

Eleкtro

Cita de: ddffgg en  7 Febrero 2013, 11:30 AMComo nota, indicar que he tenido que usar un único "%" antes de "#" para que me funcionase.

Si lo ejecutas diréctamente desde la consola sólo tienes que usar un símbolo %, pero en un script tienes que escribir dos %%, para que al ejecutarlo la CMD reconozca el símbolo, en otros casos tendrás que usar 4, 6, 8 símbolos, y todos los que hagan falta dependiendo del subnivel en el que se encuentre la variable... pero esto ya es otro tema.

Bienvenido al extraño y liante (pero no dificil) Batch.
Saludos!