Generar ficheros con nombre de fecha y hora actuales en DOS

Nuestro querido y viejo amigo, el proceso por lotes del DOS, sigue bien vivito y coleando en el “CMD” de los servidores windows, también, por mucho que se empeñen en meternos el VBS por los ojos.

Todos nos acordamos de los ficheros BAT y su limitado potencial. Las variable sde entorno, etc. Si abrís un CMD y tecleáis “SET”, os saldrán todas las variables de entorno que hay en memoria. Interesante ver cosas precocinadas como el nombre de la máquina, dominio o username actual.

No vamos a ponernos a explicar ahora qué son lso ficheros BAT, ni lo que se puede hacer con ellos, sino a poenr a vuestra disposición algo que mi desconexión de este mundillo concreto me ha hecho enterarme esta misma mañana: que se pueden hacer substrings de cadenas en DOS.

Pensar cómo lo hubiera tenido qeu hacer en Linux con grep y demás histerias, se me antoja harto complicado comparado con esta ultrasencilla sintaxis. No digo que no existea tampoco en el BASH de Linux, eh?? 🙂

  1. Antecedentes:
    Se pretendía crear un BATCH (un fichero BAT de los de toda la vida) que hiciera una taea y guardara el log en un fichero con nombre YYYYMMDD_HHMMSS_tarea.log. En CMD, existen por defecto variables de entorno que muestran fecha y hora (DATE y TIME), en el mismo formato qeu los comandos “DATE /T” (13/11/2009) y “TIME /T” (12:34:19.45). El problema viene cuando queremos usar esas variables para generar el nombre del fichero, ya que los caracteres “/” y “:” no se pueden usar para nombres de fichero. Así que o sustituimos esos caracteres por otros o compoenmos el nombre mediante subcadenas de los valores de fecha y hora. Lo primero no lo he localziado en el reducido potencial del CMD, pero sí en lo segundo.
  2. Búsqueda en Google:
    Para encontrar lo buscado, se realizó una búsqueda en Google:  cmd filename date
    Evaluando los títulos, se disparó hacia el quinto resultado y bingo! 😉 He de decir que en dicho resultado hay posts incorrectos del todo, pero enseguida reconoces el que realmente sabe de lo que habla, que es quien proporcionó la solución.
  3. Sintaxis:
    ECHO %DATE:~X,Y%

    Devuelve un substring de Y caracteres desde la posición X (la cadena comienza en la posición 0).

    ECHO %DATE%

    13/11/2009

    ECHO %DATE:~0,2%

    13

  4. Código final:
    SET FECHAGENERADA=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
    REM SET FECHAGENERADA=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
    SET LOGFILE="F:\backup\logs\%FECHAGENERADA%-backup.log"

Fuentes:

Anuncios

Debes haber iniciado sesión para comentar.

A %d blogueros les gusta esto: