[BATCH] Asignar a una variable el resultado de un comando (Solucionado)

Iniciado por TaRGaZo, 29 Junio 2009, 12:52 PM

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

TaRGaZo

Buenas,

Estoy haciendo un BAT para conceder o denegar permisos a un grupo de usuarios, entre otras, lo tengo todo más o menos listo pero no seré yo quien ejecute ese archivo y no me enteraría de algún posible error en la ejecución.

El comando usado (xcacls), tiene la opción de generar un archivo con el resultado de la ejecución al que yo he llamado "log.txt".

Si el resultado de la ejecución ha sido correcto no aparecerá la palabra "Error" en el archivo log.txt, pero si ha habido algun error esta sí que aparace indicando cual ha sido.

Usando FIND /c /i "error" log.txt

El resultado es por ej: "---------- LOG.TXT: 8" donde 8 es el numero de errores que ha habido en la ejecución

Si pongo FIND /c /i "error" log.txt > errores.txt
Crea un archivo "errores.txt" con el resultado de la ejecucion de FIND

Ahora bien, se le puede asignar a una variable el resultado del comando FIND para poder usar esa variable luego con IF en otra parte del BAT.

O quizas sería más util por ej. asignar a una variable el valor "0" si no encuentra la palabra "error" y "1" si la palabra es encontrada.

Gracias y espero haber sido suficientemente claro.

Saludos.

TaRGaZo

leogtz

A ver, te voy a dejar un ejemplo.

Tengo el siguiente archivo:
file.txt:
C:\>type "file.txt"
jsldkfjls dsjdklfjsdklfj 2wlkj Error
C:\>


Como ves, si esta la palabra "error", ahora al código:
Código (dos) [Seleccionar]
type "file.txt" | find /i "error" > nul 2>&1 && (set "error=1") || (set "error=0")


Si en el archivo "file.txt" existe la palabra "error", se seteará la variable "error" a 1, sino a 0.

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

TaRGaZo

#2
Gracias por la respuesta Leo,

Antes de postear había estado trasteando con el FOR pero no daba con la sistaxis correcta, hasta que me rendí y os pedí ayuda.

Por la tarde seguí intentádolo y finalmente di con la línea que me ha resuelto el problema y además puedo indicar la cantidad de errores que se han producido.

for /f "tokens=3" %%a in ('find /c /i "error" proteger.txt') do set errores=%%a

No se si está correctamente "escrita" la línea y quizás me sobra una variable, pero funciona  ;D.

Gracias otra vez.

Saludos.