elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Batch] Como hacer que un archivo .bat genere un log?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Batch] Como hacer que un archivo .bat genere un log?  (Leído 30,419 veces)
EndlessLoop

Desconectado Desconectado

Mensajes: 12



Ver Perfil WWW
[Batch] Como hacer que un archivo .bat genere un log?
« en: 2 Febrero 2015, 19:14 pm »

Estoy haciendo bastantes archivos .bat ultimamente... a veces no se si el archivo bat se ejecuta bien o mal, porque ejecuta el codigo y se cierra tan rapido que no alcanzo a ver si funciono. Por esto, me gustaria saber si hay alguna manera de que el bat genere un archivo de texto con un log.


En línea

Visita mi blog de tecnologia! 0101tecnologia.tk/blog

boolean EndlessLoopMLG = true
if(EndlessLoopMLG ==true){
System.out.Printin("EndlessLoop es MLG")
}
flacc


Desconectado Desconectado

Mensajes: 854


Ver Perfil WWW
Re: [Batch] Como hacer que un archivo .bat genere un log?
« Respuesta #1 en: 2 Febrero 2015, 22:11 pm »

Hola, debes ejecutar el archivo desde la consola de windows. Para  presiona las teclas windows+r, escribe cmd y presiona la tecla enter.
Luego te mueves a la ruta de tu batch script y lo ejecutas o tan solo arrastras el script a la consola y podrás ver el resultado del script sin que este se cierre.

Generación de logs:

Para generar logs, debes de sacar mensajes redireccionando la salida estándar con >>.

Ejemplo - guardaremos mensaje en el archivo log.txt

Código
  1. @echo off
  2. echo "Mensaje log" >> log.txt
  3.  

Los >> direccionan la salida a el archivo dentro del directorio actual, log.txt es el nombre del archivo. Sí el archivo existe, >> agrega la salida al final de este, para crear de nuevo el archivo y direccionar la salida en el usa >.

Espero te sirva.
Saludos


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: [Batch] Como hacer que un archivo .bat genere un log?
« Respuesta #2 en: 2 Febrero 2015, 22:28 pm »

EDITO:
Antes de nada debo decir que el ejemplo proporcionado por el compañero @Mini_Nauta no te funcionará en caso de error de sintaxis, ya que al intentar procesarse una isntrucción que contenga un error de sintaxis no se redireccionará ningún flujo de datos hacia el archivo, simplemente se seguirá cerrando la instancia de la CMD de forma inesperada como se cerraba anteriormente.



Estoy haciendo bastantes archivos .bat ultimamente... a veces no se si el archivo bat se ejecuta bien o mal, porque ejecuta el codigo y se cierra tan rapido que no alcanzo a ver si funciono. Por esto, me gustaria saber si hay alguna manera de que el bat genere un archivo de texto con un log.

Existe una solución más simple que generar un log, si quieres conocer el motivo por el cual la instancia de la CMD se cierra inesperadamente (aunque ya te digo que si se cierra inesperadamente solo será por un motivo, por un error de sintaxis), entonces solo debes ejecutar el archivo.bat directamente desde la CMD, y no haciendo doble click sobre el archivo.
Aparte de ejecutarlo desde la CMD, has de asegurarte de que no usas la instrucción "Exit" en el script para finalizar su ejecucuón, ya que la CMD también se cerrará, en su lugar usa un Pause temporalmente.

Dicho esto, generar un log en una herramienta tan simple como Batch es algo muy tedioso y poco viable si realmente se quiere hacer bien siguiendo una estructura,
primero de todo porque una consola no puede redirigir el mismo flujo de datos hacia 2 salidas distintas, es decir, mostrar el error en la consola y luego registrar ese error en un archivo de texto, o lo mismo con la salida de información, eso no es posible de manera natural, por otro lado, existen herramientas como Tee o WinTee que te permiten redirigr el mismo flujo de datos a dos salidas, pero estos programas solo actuan con la salida normal (Standard Output), no sirven para registrar errores:
http://sourceforge.net/projects/gnuwin32/files/coreutils/5.3.0/coreutils-5.3.0-bin.zip/download?use_mirror=sunet&download=
http://code.google.com/p/wintee/downloads/list

Aparte de eso, un error de sintaxis cerrará la CMD de forma inmediata, así que se necesita otro tipo de tratamiento para registrar ese tipo de error, y el tratamiento podría ser ejecutarlo en una nueva instancia de la CMD, ejemplo:
Código
  1. @Echo OFF
  2. (Call CMD.exe /C "For")1> ".\registro.log" 2>&1
  3. Pause&Exit /B 0

registro.log:
Código:
La sintaxis del comando no es correcta.


Resumiendo, si quieres hacerlo bien, debes omitir el registro del flujo normal y registrar solamente el flujo de error, es decir, los mensajes de error que pueda haber, ya que o muestras la información en la consola o lo haces en el log (a menos que utilices Tee para el redireccionamiento),
y lo debes hacer ejecutando en una nueva instancia de la CMD todos los comandos o aquellos comandos que creas que pueden ser problematicos, para evitar cierres inesperados por errores de sintaxis y así poder registrarlos.

Ejemplo:

Código
  1. @Echo OFF & Title Batch-Script Debug and Logging Simple Example by Elektro
  2.  
  3. Set "logFile=.\Registro.log"
  4. Echo+>"%logFile%"
  5.  
  6. (Echo [+] About to run command: "For %%%%a In (*.ext) Do (Echo %%%%a)"...)   1>>"%logFile%"
  7. (Call CMD.exe /C "For %%%%a In (*) Do (Echo %%%%a)")                         1>>"%logFile%" 2>&1
  8.  
  9. (Echo [+] About to run command: "For # In () Do ()"...)                      1>>"%logFile%"
  10. (Call CMD.exe /C "For # In () Do ()")                                        2>>"%logFile%"
  11.  
  12. Pause&Exit /B 0

registro.log:
Código:
[+] About to run command: "For %%a In (*.*) Do (Echo %%a)"...
archivo1.ext
archivo2.ext

[+] About to run command: "For # In () Do ()"...
No se esperaba # en este momento.

Como ves, resulta bastante tedioso Batch.

Para acabar quiero añadir que también puedes utilizar otros operadores de redireccionamiento para comprobar si un comando da error, pero en este caso no me ha parecido lo mas conveniente, te muestro un ejemplo breve:

Código
  1. (Dir /B "*.ext") && (
  2. Echo Success
  3. ) || (
  4. Echo Error
  5. )

Saludos
« Última modificación: 2 Febrero 2015, 22:50 pm por Eleкtro » En línea



EndlessLoop

Desconectado Desconectado

Mensajes: 12



Ver Perfil WWW
Re: [Batch] Como hacer que un archivo .bat genere un log?
« Respuesta #3 en: 3 Febrero 2015, 19:11 pm »

Muchas gracias a todos! ;D
En línea

Visita mi blog de tecnologia! 0101tecnologia.tk/blog

boolean EndlessLoopMLG = true
if(EndlessLoopMLG ==true){
System.out.Printin("EndlessLoop es MLG")
}
EndlessLoop

Desconectado Desconectado

Mensajes: 12



Ver Perfil WWW
Re: [Batch] Como hacer que un archivo .bat genere un log?
« Respuesta #4 en: 7 Febrero 2015, 01:20 am »

Y otra duda... hay alguna manera de seleccionar la carpeta donde genere el log?
EDIT: Solucionado.
« Última modificación: 7 Febrero 2015, 02:27 am por ElCreeperHD » En línea

Visita mi blog de tecnologia! 0101tecnologia.tk/blog

boolean EndlessLoopMLG = true
if(EndlessLoopMLG ==true){
System.out.Printin("EndlessLoop es MLG")
}
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines