Extraer la fecha con Ms-DOS

Resuelto
Hola,
estoy buscando extraer la fecha de hoy en el formato dd_mm_aaaa y almacenar el resultado en una variable (que usaré para abrir un archivo con ese nombre).
¿Es posible esto??????

32 respuestas

  1. Hola,

    una forma extremadamente simple de obtener la fecha del sistema en el formato DD_MM_AAAA con MS-DOS en una sola línea en un batch es la siguiente:

    set ladate=%date:/=_%

    Aquí indicamos que se debe reemplazar / por _

    Puedes ejecutar %date:/=_% en DOS y te mostrará la fecha en el formato DD_MM_AAAA.
    9
    1. explicación muy clara, incluso para un neófito como yo
      0
  2. He intentado el método proporcionado por poulpenstring. Funciona para responder a toto. Hemos realizado un *.bat

    set mon_fic=d:\tes-%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.txt
    echo tete> %mon_fic%

    genera un archivo tes-20031208.txt. En DOS, al escribir help set
    tendrás la ayuda en línea.
    Zorti
    7
    1. Hola a todos :)

      He utilizado este tema para crear un lote de copia de seguridad automática.
      El archivo a respaldar será renombrado con la fecha y luego la hora.

      El código es el siguiente:
      rename "%userprofile%\escritorio\FICHIER.xls" FICHIER.xls_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%_%Time:~-11,-9%%Time:~-8,-6%%Time:~-5,-3%.xls


      Lo que da como resultado un archivo llamado:
      FICHIER_20040420_114238.xls

      Todo funciona a la perfección desde las 10:00.00 hasta las 23:59.59 :))
      Pero a partir del momento en que el dígito de las decenas (para la hora) pasa a 0 (es decir, 00h, 01h, hasta 09h), provoca un error :/

      FICHIER_20040420_

      Porque la variable que contiene las decenas está medio vacía, de hecho; está constituida por:
      %Time:~-11,-10% => dígito de decenas
      %Time:~-10,-9% => dígito de unidades
      Cuando no hay decena, pues hay algo diferente a 1 o 2, pero ¿qué?

      FICHIER_20040420_?14238.xls

      ¿Cuál es este carácter??

      Si lo sé, puedo reemplazarlo por 0:

      SET dizaine %Time:~-11,-10% If %dizaine% == "caracter_inconocido" SET %dizaine% 0


      ¡Muchas gracias por la ayuda o los consejos que puedan ofrecerme!
      4
      1. Un pequeño ejemplo de lo que se puede hacer para XP/2000
        (adaptable para otras versiones; extensible para el cálculo de la fecha de Pascua...)
        Copiar/pegar las siguientes líneas en un archivo de texto para adaptar según las necesidades:
        @echo off
        REM ==============================================================================================================
        REM RECUPERACIÓN DE LA FECHA DE ÚLTIMA CIERRE DE LAS CAJAS DE UNA LISTA DADA
        REM --------------------------------------------------------------------------------------------------------------
        REM HISTORIAL:
        REM Creación 26/05/2007 Philippe LEBLANC
        REM Modificación 28/05/2007 Philippe LEBLANC
        REM Rediseño debido a que en la planificación de tareas no se devuelve ningún valor por las subrutinas
        REM ==============================================================================================================
        setlocal EnableDelayedExpansion
        title RECUPERACIÓN DE LA FECHA DE ÚLTIMA CIERRE DE LAS CAJAS DE UNA LISTA DADA

        REM ----- PARÁMETROS -------------------------------------
        set path=%path%;c:\progra~1\tivoli\lcf\bin\w32-ix86\tools

        REM Versión de windows
        for /F "usebackq delims==" %%i in (`ver`) do set OSVER=%%i

        REM Identificaciones windows XP y 2K
        set USERADMIN=xxxxxxxxx
        set ADMPASXP=yyyyyyyyy
        set ADMPAS2K=zzzzzzzzz
        set USERCAISSE=ttttttttt\CAISSE
        set CAIPAS2K=uuuuuuuuu
        set CAIPASXP=vvvvvvvvv

        REM Archivo que contiene la lista de las cajas
        set FichierCaisses=liste.csv
        REM Archivo temporal que contiene la lista de las cajas ya tratadas
        set FichierTemp=liste.tmp
        set Lecteur=C$
        REM Directorio de recuperación
        set Repertoire=winstore
        set Chemin=%Lecteur%\%Repertoire%
        REM Archivo ini
        set FichierData=Transferts.ini

        REM Recuperación de la fecha y la hora
        call :DateHeureSysteme
        set Bissextile=0
        set Semaine=0
        set Journee=0
        call :JourneeSemaineDate %Annee% %Mois% %Jour%
        if "%Mois%" == "01" set NomMois=Enero
        if "%Mois%" == "02" set NomMois=Febrero
        if "%Mois%" == "03" set NomMois=Marzo
        if "%Mois%" == "04" set NomMois=Abril
        if "%Mois%" == "05" set NomMois=Mayo
        if "%Mois%" == "06" set NomMois=Junio
        if "%Mois%" == "07" set NomMois=Julio
        if "%Mois%" == "08" set NomMois=Agosto
        if "%Mois%" == "09" set NomMois=Septiembre
        if "%Mois%" == "10" set NomMois=Octubre
        if "%Mois%" == "11" set NomMois=Noviembre
        if "%Mois%" == "12" set NomMois=Diciembre
        if "%Journee%"=="1" set NomJour=Lunes
        if "%Journee%"=="2" set NomJour=Martes
        if "%Journee%"=="3" set NomJour=Miércoles
        if "%Journee%"=="4" set NomJour=Jueves
        if "%Journee%"=="5" set NomJour=Viernes
        if "%Journee%"=="6" set NomJour=Sabado
        if "%Journee%"=="7" set NomJour=Domingo

        REM Creación del archivo log
        set FichierLog=TransfertsIniCaisses_%aaaammjj%.log
        echo %DateHeure% Inicio de la recuperación para el %NomJour% >> %FichierLog%

        REM Prueba de lanzamiento por presencia del archivo que contiene la lista de las cajas
        if not exist %FichierCaisses% (
        echo %DateHeure% : No se puede recuperar porque el archivo que contiene la lista de cajas %FichierCaisses% está ausente. >> %FichierLog%
        goto :SORTIE) else (echo.)
        REM Prueba de lanzamiento diario según el día de la semana
        if "%NomJour%"=="Sábado" (
        echo %DateHeure% : No hay recuperación planificada el %NomJour%. >> %FichierLog%
        goto :SORTIE) else (echo.)

        REM Inicialización del archivo resultado
        set FichierResultat=ResultatTransfertsIniCaisses_%aaaammjj%.txt
        echo Caja;FechaCierre > %FichierResultat%

        REM ----- BUCLE ------------------------------------------
        REM Bucle de lectura del archivo de la lista de cajas
        for /F "tokens=1,2 delims=;" %%i in (%FichierCaisses%) do (

        REM Prueba del indicador 'ya tratado' del archivo de la lista de cajas
        if %%j==O (echo %%i;O >> %FichierTemp%) else (

        REM Conexión con la caja
        net use \\%%i\ipc$ /user:%USERADMIN% %ADMPASXP% || net use \\%%i\ipc$ /user:%USERADMIN% %ADMPAS2K%
        if ERRORLEVEL 1 (
        echo %DateHeure% : %%i no conectada >> %FichierLog%
        echo %%i;N >> %FichierTemp%) else (

        REM Recuperación de la fecha de última cierre de la caja
        call :DateClotureCaisse \\%%i\%Chemin%\%FichierData% %%i

        )
        REM Fin de conexión con la caja
        net use \\%%i\ipc$ /d
        )
        REM Fin de la prueba del indicador 'ya tratado' del archivo de la lista de cajas
        )
        REM Fin del bucle de lectura del archivo de la lista de cajas
        REM -------------------------------------------------------

        REM Actualización del archivo de la lista de cajas
        copy /Y %FichierTemp% %FichierCaisses%

        REM Recuperación de la fecha y la hora
        call :DateHeureSysteme

        :SORTIE
        REM Mensaje de log
        echo %DateHeure% Fin de la recuperación para el %NomJour% >> %FichierLog%

        REM Eliminación de archivos temporales
        @del /q /f %FichierTemp%

        REM Fin del tratamiento principal
        goto :EOF
        REM ==============================================================================================================

        REM ----- SUBRUTINA ------------------------------------
        :DateClotureCaisse
        REM -------------------------------------------------------
        REM Recuperación de la fecha de última cierre de la caja
        REM parámetros: nombre del archivo de datos, nombre de la caja según el formato 'VEG'
        REM
        call :DateHeureSysteme
        REM ----- BUCLE ------------------------------------------
        REM Bucle de lectura del archivo de datos:
        REM Búsqueda de la fecha atribuida a la cláusula 'DateDerniereCloture='
        REM Inicialización de la variable 'DateCloture', nula si la cláusula no se encuentra
        for /F "tokens=1,2 delims==" %%g in (%1) do (if %%g == DateDerniereCloture set DateCloture=%%h)
        REM
        REM Prueba de la variable 'DateCloture':
        REM Escritura en el archivo resultado si la variable está informada
        REM Actualización del archivo temporal que contiene la lista de cajas ya tratadas
        if "%DateCloture%"=="" (
        echo %DateHeure% : Fallo al leer la fecha de cierre de la caja %2 >> %FichierLog%
        echo %2;N >> %FichierTemp%) else (
        echo %2;%DateCloture% >> %FichierResultat%
        echo %2;O >> %FichierTemp%)
        REM
        REM ----- Fin de la subrutina
        goto :EOF

        REM ----- SUBRUTINA ------------------------------------
        :DateHeureSysteme
        REM -------------------------------------------------------
        REM Recuperación de la fecha y la hora del sistema
        REM según la versión del SO, Windows 2000 o XP
        if "%OSVER:~18,2%"=="XP" (
        set Annee=%DATE:~6,4%
        set Mois=%DATE:~3,2%
        set Jour=%DATE:~0,2%
        set Heure=%TIME:~0,2%
        set Minutes=%TIME:~3,2%
        set Secondes=%TIME:~6,2%) else (
        if "%OSVER:~18,4%"=="2000" (
        set Annee=%DATE:~11,4%
        set Mois=%DATE:~8,2%
        set Jour=%DATE:~5,2%
        set Heure=%TIME:~0,2%
        set Minutes=%TIME:~3,2%
        set Secondes=%TIME:~6,2%))
        if %Heure% LSS 10 set Heure=0%Heure:~1,1%
        REM
        set DateHeure=%Jour%/%Mois%/%Annee% - %Heure%:%Minutes%:%Secondes%
        set aaaammjj=%Annee%%Mois%%Jour%
        REM
        REM ----- Fin de la subrutina
        goto :EOF

        REM ----- SUBRUTINA ------------------------------------
        :JourneeSemaineDate
        REM -------------------------------------------------------
        REM Recuperación de los elementos de fecha tales como
        REM el día bisiesto del año,
        REM el ordinal de la semana del año,
        REM el ordinal del día de la semana
        set yy=%1
        set mm=%2
        set dd=%3
        set ly=0
        set /a lx=%yy% %% 4
        if %lx% EQU 0 set ly=1
        set /a lx=%yy% %% 100
        if %lx% EQU 0 set ly=0
        set /a lx=%yy% %% 400
        if %lx% EQU 0 set ly=1
        if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
        set /a dd=100%dd%%%100,mm=100%mm%%%100
        set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,Jd=153*m+2
        set /a Jd=Jd/5+dd+y*365+y/4-y/100+y/400-32045
        set /a y=yy+4798,Jp=y*365+y/4-y/100+y/400-31738,t=Jp+3,Jp=t-t%%7
        set /a y=yy+4799,Jt=y*365+y/4-y/100+y/400-31738,t=Jt+3,Jt=t-t%%7
        set /a y=yy+4800,Jn=y*365+y/4-y/100+y/400-31738,t=Jn+3,Jn=t-t%%7
        set /a Jr=%Jp%,yn=yy-1,yn+=Jd/Jt,yn+=Jd/Jn
        if %Jd% GEQ %Jn% (set /a Jr=%Jn%) else (if %Jd% GEQ %Jt% set /a Jr=%Jt%)
        set /a diff=Jd-Jr,cw=diff/7+1,wd=diff%%7,wd+=1
        if %cw% LSS 10 set cw=0%cw%
        REM
        set %Bissextile%=%ly%
        set Semaine=%cw%
        set Journee=%wd%
        REM echo yyyy: [%yy%] mm: [%mm%] dd: [%dd%] wd: [%wd%] cw: [%Semaine%] ly: [%Bissextile%]
        REM
        REM ----- Fin de la subrutina
        goto :EOF
        3
        1. Bravo y gracias Philippe, por este ejemplo generoso en términos de código y comentarios, que me apuro a copiar/pegar en caso de necesidad.
          Que tengas un buen día.
          3
          1. Gracias, he propuesto esto en todos los sitios de "CodeS-SourceS" y me han echado! con el pretexto de que no encajaba en ninguna categoría... ¡qué les den!#§@?
            0
        2. Hola,

          Una pequeña aclaración sobre el manejo de las fechas... Me he dado cuenta de que, lamentablemente, según el sistema operativo los resultados son diferentes, e incluso no funcionales. Se trata, por supuesto, del "dos" que puede ser diferente dependiendo de si estás en ... win95, win98, win98SE, 2000 o XP.

          Por ejemplo, en 95 y algunas versiones de 98 la función "date /T" no funciona y es imposible obtener la fecha sin esperar una respuesta...(por eso creo que se hizo el /T).

          De todos modos, siempre hay una posibilidad, incluso buscar en la red funciones Unix que funcionen en ms/dos.

          Buenas noches
          2
          1. Hola,
            Si quieres jugar con los batch, prueba el sitio http://www.robvanderwoude.com/
            Tendrás todo sobre todo.

            ¡Hasta luego!
            1
            1. Hola Mbt,

              De hecho, este sitio parece muy interesante... Así que hay que añadirlo inmediatamente a los Favoritos. Gracias

              Buenas noches
              0
          2. Oufff, a fuerza de trastear, lo logré :)
            propongo el siguiente código:

            @Echo off SET dizaine=A%time:~0,1%B if A1B==%dizaine% goto OK if A2B==%dizaine% goto OK :ZERO SET dizaine=0 goto fin :OK SET dizaine=%time:~0,1% goto fin :FIN rename "%userprofile%\escritorio\archivo.xls" archivo_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%_%dizaine%%Time:~-10,-9%%Time:~-8,-6%%Time:~-5,-3%.xls


            ¡¡¡MUCHAS gracias por tu ayuda!!!
            y gracias también por el excelente enlace.
            ¡Buena continuación :)
            1
            1. Bueno, tenía 2 minutos y 30 segundos por delante...

              Aquí hay un ejemplo completo si consideramos que tus archivos están en C:\ y que los copias a D:\

              El ejemplo es intencionadamente simplista, puedes eventualmente optimizarlo con bucles u otras etiquetas... (si te apetece)

              set mon_fic=c:\bases_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.FIC
              copy %mon_fic% d:\
              set mon_fic=c:\bases_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.NDX
              copy %mon_fic% d:\
              set mon_fic=c:\histo_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.FIC
              copy %mon_fic% d:\
              set mon_fic=c:\histo_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.NDX
              copy %mon_fic% d:\
              set mon_fic=c:\reglem_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.FIC
              copy %mon_fic% d:\
              set mon_fic=c:\reglem_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%.NDX
              copy %mon_fic% d:\


              (todo en un archivo.bat por supuesto)

              Que tengas un buen día.
              1
              1. Pequeña modificación (más racional y un poco más limpia)

                set Wdatjour=%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%
                copy c:\bases_%wdatjour%.FIC D:\
                copy c:\bases_%wdatjour%.NDX D:\
                copy c:\histo_%wdatjour%.FIC D:\
                copy c:\histo_%wdatjour%.NDX D:\
                copy c:\reglem_%wdatjour%.FIC D:\
                copy c:\reglem_%wdatjour%.NDX D:\

                voilà...
                0
            2. ```batch
              @echo off
              set amj=%date:~6,4%%date:~3,2%%date:~0,2%
              set h=%time:~0,2%
              set m=%time:~3,2%
              set s=%time:~6,2%
              if %h% lss 10 set h=0%h:~1,1%
              set hms=%h%%m%%s%
              rar a -m3 -ep c:\contact-%amj%-%hms%.rar c:\contact.doc
              move c:\contact-%amj%-%hms%.rar E:\backup\
              pause
              ```
              1
              1. date /T > date.txt

                tendrás casi lo que deseas en el archivo date.txt:
                jue. 24/07/2003
                0
                1. Sí, pero el problema es que quiero usar esta fecha para nombrar un archivo, así que las "/", ¡no son lo mejor!
                  0
                2. @van'¿Programas en qué? ¿DOS? ¿Java? ¿C/C++? ¿Otro?
                  0
                3. @van'En dos
                  0
                4. @van'¿O hay alguien que sepa cómo renombrar un directorio con la fecha de hoy?
                  0
              2. dans ton fichier date.txt tu fais édition>chercher> et tu remplaces "/" par "_"
                0
                1. creo que quisiera hacerlo automáticamente desde DOS (como con el comando awk en Unix) pero en DOS, a mi parecer, está complicado...
                  0
                2. Él es Ella, pero bueno, no importa...
                  Bueno, si nadie tiene idea, voy a hacer otra cosa...
                  0
                3. @van'Hola,

                  para realizar lo que pides, debes usar las variables de entorno en tu archivo por lotes.

                  ejemplo toto.bat
                  rem*** asignar a la variable mon_fic un nombre de archivo (y su ruta) llamado de la siguiente manera jour.txt ***
                  set mon_fic = c:\dossier1\mesfichiers\%DATE:~0,-8%.txt

                  rem ** escribir coucou en el archivo **
                  echo coucou > %mon_fic%

                  para variar la cadena de caracteres, debes manipular la parte "0,-8" del comando...
                  0 = del primer carácter
                  -8 = menos los 8 últimos

                  podrás encontrar las diferentes formas de dar formato a la fecha escribiendo el comando en dos: set /help

                  Eso es todo, buena suerte...
                  0
                4. @poulpenstringgracias por este puesto poulpenstring, es exactamente lo que estaba buscando, gracias de nuevo.
                  ruxpin
                  0
                5. @van'lo siento ...

                  mirza
                  0
              3. He intentado la manipulación en Dos pero no funciona, me crea un archivo %Date%.txt
                ¿Alguien puede ayudarme?
                0
                1. ve a la página
                  http://www.chez.com/scudo/Faq/dos/
                  ahí está la respuesta... ¡es poderosa!
                  Crea una variable _d que contiene la fecha. Después hay que manipular un poco como se escribió más arriba para hacer lo que quieras.

                  Mbt
                  0
              4. command /e:2000 /c for %%i in (1 2) do prompt set _d=$d$_ | find "$" /v >{t}.bat
                for %%c in (call del) do %%c {t}.bat
                0
                1. ¡Hola a todos! Me gustaría conocer algunas aplicaciones de DOS para programar.
                  ¿Qué se puede hacer con DOS?
                  ¿Tienen algún programa?
                  ¿Se puede crear un archivo exe con DOS?
                  ¡Gracias de antemano por sus respuestas!
                  ¡Feliz año a todos y buena continuación!
                  @+
                  tom
                  0
                  1. Hola;
                    ¿Cómo renombrar con un .bat el archivo
                    e.txt a 12:59.txt
                    e.txt: archivo a renombrar
                    12:59.txt: nombre deseado, 12:59 es la hora actual
                    Sería fabuloso para automatizar copias de seguridad...
                    0
                    1. He intentado reemplazar la variable en cuestión: si no contiene ni 1 ni 2, le coloco un 0 :)
                      pero ni siquiera puedo hacer una prueba sobre eso... :(
                      ¡ayuda!

                      @Echo off SET dizaine=%Time:~-11,-10% @echo var original : %dizaine% IF %dizaine% == 1 goto fin IF %dizaine% == 2 goto fin SET dizaine=0 GOTO fin :fin @echo var despues de la prueba : %dizaine% pause
                      0
                      1. Hola,
                        ¿Bajo qué sistema operativo estás? He probado tu script, pero aparentemente el cero no existe en %time%, así que el primer carácter es... o las decenas o las unidades (así que no es posible probarlo). Echaré un vistazo a tu problema. En mi opinión, deberías empezar por probar la cantidad de caracteres antes de los : (dos puntos). ¿Cómo? Hay que verlo...

                        Que tengas un buen día
                        0
                      2. Hola :)
                        Estoy usando Win2k.

                        Entonces, lo que me dices es que cuando quiero llenar la variable decena:
                        SET decena=%Time:~-11,-10%

                        contiene 1 o 2, o no está definida?
                        Sin embargo, cuando muestro la hora, hay un "espacio" :
                        _9:48
                        y no
                        9:48
                        en cambio, cuando intento mostrarla sola, realmente da un error, creo.

                        ¿cómo saber qué es ese maldito carácter? ¿existe solo? debo admitir que estoy completamente perdido, incluso con toda la buena voluntad del mundo :/

                        No tengo idea de cómo probar el número de caracteres contenidos en una cadena :(

                        sin embargo, intenté algo como
                        if not defined set decena a 0

                        pero no funcionó...

                        gracias por la ayuda :)
                        0
                    2. Aquí tienes una manera...
                      intenta con el siguiente batch y modifícalo según tus necesidades...
                      especialmente para la creación del archivo, no me ocupé de esa parte...

                      es un poco forzado pero funciona...

                      ______________________________________________________

                      echo off
                      rem *** poner un cero delante de la hora****
                      set wcontrol=%time:~0,1%
                      set wcontrol=A%wcontrol%B
                      echo %wcontrol%

                      if A1B==%wcontrol% goto OK
                      if A2B==%wcontrol% goto OK

                      :CERO
                      echo 0%time:~1,10%.xls
                      goto fin

                      :OK
                      echo %time%.xls
                      goto fin

                      :FIN
                      echo on


                      ______________________________________________________

                      Buena suerte y manténme informado
                      0
                      1. Solo una info así de paso... El problema con los comandos SET - DATE y TIME es la "no portabilidad" en ciertos casos. De hecho, como menciono un poco más arriba, un batch que contenga estos comandos podría no funcionar en W95 o W98 o 2000 o XP, todo depende de la versión de DOS que esté integrada.
                        Por eso, lo ideal sería, en mi opinión, utilizar en su lugar pequeñas funciones (o programas exe y com) encontradas en el mundo Unix o creadas por uno mismo, que fueran utilizables en cualquier plataforma.

                        Si tienen ideas en este sentido... Estoy interesado. Gracias de antemano.

                        Un ejemplo, vardate.exe, devolvería, según sus parámetros, una variable en diferentes formas JJ_mm_aa o HH_jj_mm o incluso LUN (para lunes=) etc. etc. etc.
                        0
                        1. hola,
                          en Win98, no funciona.
                          Quiero renombrar un archivo con la fecha de hoy.
                          Todo esto ejecutado en un .bat

                          ¿Alguien tiene alguna idea?
                          0
                          • 1
                          • 2