Extraer la fecha con Ms-DOS

Resuelto
van' -  
 fafa90 -
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
  • 2
  1. Pitichat
     
    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. fafa90
       
      explicación muy clara, incluso para un neófito como yo
      0
  2. zorti
     
    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
  3. eric
     
    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
  4. Leblanc philippe
     
    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
  5. poulpenstring Mensajes publicados 32 Estado Miembro 33
     
    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. Alodar
       
      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
  6. poulpenstring
     
    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
  7. Mbt
     
    Hola,
    Si quieres jugar con los batch, prueba el sitio http://www.robvanderwoude.com/
    Tendrás todo sobre todo.

    ¡Hasta luego!
    1
    1. poulpenstring Mensajes publicados 32 Estado Miembro 33
       
      Hola Mbt,

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

      Buenas noches
      0
  8. eric
     
    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
  9. poulpenstring Mensajes publicados 32 Estado Miembro 33
     
    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. poulpenstring Mensajes publicados 32 Estado Miembro 33
       
      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
  10. awax2050 Mensajes publicados 10 Fecha de registro   Estado Miembro Última intervención   8
     
    ```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
  11. mirza
     
    date /T > date.txt

    tendrás casi lo que deseas en el archivo date.txt:
    jue. 24/07/2003
    0
    1. van'
       
      Sí, pero el problema es que quiero usar esta fecha para nombrar un archivo, así que las "/", ¡no son lo mejor!
      0
      1. mirza > van'
         
        ¿Programas en qué? ¿DOS? ¿Java? ¿C/C++? ¿Otro?
        0
      2. van' > van'
         
        En dos
        0
      3. van' > van'
         
        ¿O hay alguien que sepa cómo renombrar un directorio con la fecha de hoy?
        0
  12. gringo
     
    dans ton fichier date.txt tu fais édition>chercher> et tu remplaces "/" par "_"
    0
    1. mirza
       
      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. van'
       
      Él es Ella, pero bueno, no importa...
      Bueno, si nadie tiene idea, voy a hacer otra cosa...
      0
      1. poulpenstring > 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
      2. ruxpin > poulpenstring
         
        gracias por este puesto poulpenstring, es exactamente lo que estaba buscando, gracias de nuevo.
        ruxpin
        0
      3. mirza > van'
         
        lo siento ...

        mirza
        0
  13. toto
     
    He intentado la manipulación en Dos pero no funciona, me crea un archivo %Date%.txt
    ¿Alguien puede ayudarme?
    0
    1. mbt
       
      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
  14. mbt
     
    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
  15. titom
     
    ¡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
  16. accueil@cabinet-castaldo.com
     
    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
  17. eric
     
    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. poulpenstring
       
      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. eric
       
      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
  18. poulpenstring
     
    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
  19. poulpenstring Mensajes publicados 32 Estado Miembro 33
     
    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
  20. albert
     
    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