Alberto Robledo Cotrina – Windows Tools and Tips

Consejos y Herramientas sobre Tecnologías Microsoft

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.

4 respuestas to “Generar Ficheros con Fecha/Hora desde un CMD”

  1. Josep M. said

    Muchisimas gracias por tu trabajo. Los ejemplos me han servido para crear ficheros de comandos que varían según el día del mes.

  2. Pep Fuertes said

    Buen documento. Gracias por publicarlo. Seguro que muy pronto va a resultar útil 🙂

    Hasta luego!

  3. Pep Guardiola said

    Gracias por este documento, realmente muy útil.

  4. Pedro García said

    Gracias por tan buena explicación, verdaderamente muy útil.
    Utilidad que estaba buscando, acostumbrado a encontrarlo mas facilmente en otros O.S .

Deja un comentario