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. 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
  3. 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
  4. 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
  5. 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. 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,

        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 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. 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. 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. 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
              3. 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. 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. 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. 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. 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. 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
                          • 1
                          • 2