Alberto Robledo Cotrina – Windows Tools and Tips

Consejos y Herramientas sobre Tecnologías Microsoft

Archive for the ‘Hora’ Category

Generar Ficheros con Fecha/Hora desde un CMD

Posted by Alberto Robledo en octubre 23, 2008

No se si alguna vez os habréis encontrado con la necesidad de generar un fichero, a modo de log, con la fecha del día correspondiente, o la hora. Hacer esto en VBS es sencillo… pero ¿que ocurre si lo necesitas hacer en un BAT/CMD? ¿Se puede?

La respuesta es que, efectivamente, SE PUEDE… Puedes aprovechar la gestión de texto en cualquier variable de entorno. Yo he encontrado poca información (por no decir ninguna) de esta funcionalidad de la consola de comandos, y siempre que me ha surgido la necesidad, he tenido que volverme loco buscando «aquél CMD que tengo guardado donde hice esto…».

Vamos allá: En nuestro caso, utilizaremos el operador :~a,b, llamándole al final de la variable de entorno, y antes del último %.

Os explico su funcionamiento ya que es bastante complejo: El operador :~a,b se compone, como es evidente, de dos números, ‘a’ y ‘b’, tales que:

  • El número ‘a’ indica el inicio del texto a partir del que se obtiene el valor deseado (la primera posición es ‘0’), y
  • El número ‘b’ indica el número de caracteres que se desean tomar de dicho texto. Cabe destacar que, si ‘b’ es positivo, el texto indica las posiciones  tomadas desde el carácter número ‘a’ (inclusive) en adelante, y si ‘b’ es negativo, indica las posiciones tomadas desde el final del texto, hacia atrás, y hasta el número ‘a’

Como muestra, un botón. Generaremos nuestra variable de entorno del siguiente modo: set Texto=0123456789

Probaremos primero hacia delante:

  • Para obtener dos posiciones desde la quinta (+1 ya que empezamos en 0): echo %Texto:~5,2%, que nos devuelve el texto ‘56‘.
  • Para obtener tres posiciones, escribiremos echo %Texto:~5,3% que nos devuelve el texto ‘567‘…

Y ahora, hacia atrás:

  • Para eliminar los dos últimos carácteres, escribiremos echo %Texto:~5,-2% , lo que devuelve ‘567‘ (se «ha cargado» los dos últimos caracteres, ‘8’ y ‘9’),
  • Para eliminar el último carácter, escribiremos echo %Texto:~5,-1%… que devolverá ‘5678‘ ya que elimina el último carácter, el ‘9’.

Se le puede sacar el máximo jugo al operador anterior con las variables de entorno de hora y tiempo, y sobre todo en scripts de comandos. Por ejemplo, con una variable %Date% con valor 23/10/2008, tendremos que:

  • Echo %Date:~0,2% nos devolverá el día, ‘23‘,
  • Echo %Date:~3,2% nos devolverá el mes, ‘10‘, y
  • Echo %Date:~6,4% nos devolverá el año, ‘2008‘.

Lo mismo es aplicable a la hora: Con una variable %Time% con valor 14:08:09,52 tendremos que:

  • Echo %Time:~0,2% nos devolverá la hora, ‘14‘,
  • Echo %Time:~3,2% nos devolverá los minutos, ‘08‘, y
  • Echo %Time:~6,5% nos devolverá los segundos, ‘09,52‘.

Una vez entendido todo esto, podéis pasar a generar un fichero de texto de nombre, por ejemplo, «Log<FECHA><HORA>.log» de este modo:

  • Set Fecha=%Date:~0,2%%Date:~3,2%
  • Set Hora=%Time:~0,2%%Time:~3,2%
  • Echo «Texto Deseado» > Log%Fecha%%Hora%.log

Con las tres líneas anteriores se debe haber generado un fichero de texto de nombre Log23101408.log.

Puede ser complejo de entender, pero a mí me ha salvado ya de más de una… Con lo que os recomiendo que practiquéis, ya que un simple trozo de texto puede dar una potencia brutal a vuestros CMD.

Un saludo,

Alberto Robledo.

Posted in Fecha, Ficheros, Hora, Linea de Comandos, Scripts | 4 Comments »