Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: ddffgg en 7 Febrero 2013, 09:46 am



Título: [BATCH] Guardar salida de comando a variable
Publicado por: ddffgg en 7 Febrero 2013, 09:46 am
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
  1. fichero=$(ls -1 | grep fichero_log | sort | tail -n 1)
  2. tail -f $fichero

Que sería lo mismo que:

Código
  1. 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!


Título: Re: [BATCH] Guardar salida de comando a variable
Publicado por: Eleкtro en 7 Febrero 2013, 10:28 am
No puedes hacerlo diréctamente como en Bash.

Código
  1. For /F "Tokens=*" %%# in ('comando1 ^| comando2') Do (Set "Variable=%%#")

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

Saludos


Título: Re: [BATCH] Guardar salida de comando a variable
Publicado por: ddffgg en 7 Febrero 2013, 11:30 am
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.


Título: Re: [BATCH] Guardar salida de comando a variable
Publicado por: Eleкtro en 7 Febrero 2013, 12:30 pm
Como 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!