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. ```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. Pour mostrar la hora en un nombre de archivo y evitar el problema de cero en el caso de que la hora esté entre (00h = 0h a 09 = 9h), solo hay que reformatear la variable utilizada para mostrar la hora, por ejemplo, si la variable usada es vtime, se utiliza otra variable ptime=%vtime: =0% esta orden reemplaza el cero en vtime por 0 (si vtime= 92531 entonces ptime=092531)
      0
      1. for /f "tokens=1-3 delims:;" %%i in ('time /t') do echo Testing: %date:/=_ %%%ih%%j >> _test-date-time.txt

        =)
        0
        1. Súper, también funciona muy bien.
          0
      2. ¡Guau, 6 años después :) ¡Yo digo bravo, señor! ... ¡No nos rejuvenece todo esto! Pero es un placer ver que las horas pasadas elaborando pequeños trozos de código todavía pueden servir 6 años después. Admito que de vez en cuando hago pequeños copiar/pegar de los ejemplos explicados en este hilo. ¡Felices fiestas de fin de año para ti!

        Poulpenstring
        0
        1. 6 años después, agradezco a Eric y Poulpenstring por su ayuda
          Gracias a ellos, he logrado hacer mi batch fácilmente y funciona perfectamente.
          Muchas gracias
          0
          1. Hola Van,

            Prueba el comando string.com

            y ejecuta un script .BAT como sigue

            Echo OFF
            STRINGS DÍA = DAY

            RENOMBRAR file.txt %DÍA%.TXT

            Buena suerte Van

            SEMTECH
            0

            1. día de la semana (lunes.....viernes)
              día(dd)
              mes(mm)
              año(aaaa)
              0
              1. Je suis ici pour vous aider avec vos traductions. Veuillez fournir le texte que vous souhaitez traduire.
                0
            2. 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
            3. Al mirar este tema, me di cuenta de que la respuesta n°15 de este tema corresponde a tus expectativas...

              en el ejemplo:

              set mi_archivo=c:\ZZZ-%Fecha:~-4%%Fecha:~-7,-5%%Fecha:~-10,-8%.XXX
              echo %mi_archivo%

              solo necesitas reemplazar c:\ por la ruta correcta - ZZZ por el nombre de tu archivo y XXX por la extensión de tu archivo, luego hacer tu copia en lugar del comando echo de este ejemplo...

              quedaría algo así:

              set mi_archivo=c:\bases_-%Fecha:~-4%%Fecha:~-7,-5%%Fecha:~-10,-8%.FIC
              copy %mi_archivo% DESTINO (ver la sintaxis exacta de copy)

              Todo en un .bat practicando lo mismo para...
              bases_20080405.NDX
              histo_20080405.FIC
              histo_20080405.NDX
              reglem_20080405.FIC
              reglem_20080405.NDX

              A probar.......

              Buen día
              0
              1. Hola,

                Sí, es ciertamente posible. Estando en la oficina, no tengo mucho tiempo para hacer una prueba, pero mientras tanto, ¿por qué no pruebas un buen software de sincronización como SyncBackSE que hará este trabajo maravillosamente?

                Perdona por esta respuesta incompleta, pero mientras tanto, nunca se sabe si esto te puede ayudar.

                ¡Que tengas un buen día!
                0
                1. Trabajo en un software que crea cada día 6 archivos que corresponden al historial del día.
                  Estos archivos son:
                  bases_20080405.FIC
                  bases_20080405.NDX
                  histo_20080405.FIC
                  histo_20080405.NDX
                  reglem_20080405.FIC
                  reglem_20080405.NDX

                  Mi misión es enviar todos los días a las 23h, únicamente los 6 archivos que contengan la fecha del sistema, hacia una computadora remota (así que la transferencia es por IP) y pegarlos en un directorio específico.

                  ¿Está clara mi pregunta? ¿Es irrealizable? ¡Gracias a quien me saque de este mal paso!
                  0
                  1. Notas:

                    Atención a las variables declaradas en un bucle for o en una llamada realizada dentro del bucle for:
                    -- no es posible actualizar o recuperar.
                    -- utilizar variables declaradas antes del bucle.
                    -- probar bien antes de poner en producción.

                    Por mi parte, realizo mis operaciones completamente en las llamadas;
                    el bucle for solo me sirve para leer los valores uno tras otro.
                    0
                    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. 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. Tengo una base de datos en SQL Server y quiero agregar datos en ciertas tablas, pero estoy en Access XP. De hecho, estoy enlazando tablas a la base de SQL Server a través de ODBC. ¿Qué seguridad debo establecer en las tablas para que esto sea posible?

                        0
                        1. Para recuperar la fecha (o la hora), sin usar un archivo tmp:

                          for /F "tokens=1* delims=@" ('date /T') do set date=%%a
                          delims=@ permite recuperar todo en una sola variable
                          de lo contrario, se pueden usar varios delimitadores y recuperar los campos individualmente.

                          para tener explicaciones: help for

                          sólo funciona bajo W/NT y superior (no bajo W98)
                          0
                          1. Aaaaaaah finalmente la solución que funciona en mi sistema

                            Estaba empezando a desesperarme...

                            Gracias Yazul
                            0
                        2. 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. 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. 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
                              • 2