Extraire la date avec Ms-dos

Résolu
bonjour,
je cherche a extraire la date du jour sous le dos, à la mettre sous la forme jj_mm_aaaa, et mettre le résultat obtenu dans une variable (qui me servira a ouvrir un fichier portant ce nom).
est ce que c possible ???????

32 réponses

Résumé de la discussion

L'objectif est d'extraire la date du jour sous DOS et de la mettre au format jj_mm_aaaa afin de l'utiliser dans une variable qui renomme ou ouvre un fichier. Plusieurs propositions existent, mais une méthode simple consiste à remplacer les séparateurs de date dans la variable système par des underscores, par exemple set ladate=%date:/=_% pour obtenir jj_mm_aaaa. Des variantes plus robustes s'adaptent selon le système (DOS ancien, XP/2000) et illustrent comment concaténer Date et Time pour composer des noms incluant l'heure. En pratique, il faut aussi gérer les éventuels caractères invisibles lorsque l'heure est 00 et prévoir des zéro devant les chiffres, afin d'éviter des noms de fichier incomplets.

Bobot (l’IA à votre service)
  1. Bonjour,

    une manière extrêmement simple d'obtenir la date système sous la forme JJ_MM_AAAA avec MS-DOS est en une seule ligne dans un batch est la suivante :

    set ladate=%date:/=_%

    Là on indique qu'il faut remplacer / par _

    Vous pouvez exécuter %date:/=_% sous DOS et ça vous affichera bien la date sous la forme JJ_MM_AAAA
    9
    1. explication très clair, y compris pour un néophyte comme moi
      0
  2. date /T > date.txt

    tu auras presque ce que tu souhaites dans le fichier date.txt:
    jeu. 24/07/2003
    0
    1. Oui mais le problème c que je veux utiliser cette date pour nommer un fichier, alors les "/", c'est pas top !
      0
    2. @van'tu programme en quoi ? DOS ? java ? C/C++ ? autre ?
      0
    3. @van'En dos
      0
    4. @van'Où alors est ce qq1 sait comment renommer un répertoire avec la date du jour ????
      0
  3. dans tn fichier date.txt tu fais edition>chercher> et tu remplace "/" par "_"
    0
    1. je pense qu'il souhairterai le faire automatiquement depuis DOS (comme avec les command awk en Unix) mais en DOS à mon avis c'est mal barré ...
      0
    2. Il c'est Elle, mais bon c pas grave...
      Bon bah si personne a d'idée je vais faire autrement....
      0
    3. @van'Bonjour,

      pour effectuer ce que tu demande, il faut te servir des variables d'environnement dans ton fichier batch.

      exemple toto.bat
      rem*** affecter a la variable mon_fic un nom de fichier (et son chemin) comportant nommé de la maniere suivante jour.txt ***
      set mon_fic = c:\dossier1\mesfichiers\%DATE:~0,-8%.txt

      rem ** ecrire coucou dans le fichier **
      echo coucou > %mon_fic%

      pour faire varier la chaine de caractere, il faut jouer sur la partie "0,-8" de la commande...
      0 = du premier caractere
      -8 = sauf les 8 derniers

      tu pourras trouver les differente façcons de formater la date en tapant la commande sous dos : set /help

      Voila bon courage...
      0
    4. @poulpenstringmerci pour ce poste poulpenstring c'est exactement ce ke je cherchais merci encore.
      ruxpin
      0
    5. @van'désolé ...

      mirza
      0
  4. J'ai essayé la manipulation sous Dos ca ne marche pas il me cré uun fichier %Date%.txt
    kkun peut m'aider ?
    0
    1. va sur le site
      http://www.chez.com/scudo/Faq/dos/
      il y a la réponse..elle est puissante !
      Ca créé une variable _d qui contient la date. Après il faut un peu maniper comme écrit plus haut pour en faire ce que tu veux.

      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
    (en 2 lignes : la première commence par "command", la 2è par "for %%c")
    0
    1. J'ai essayé la méthode fournie par poulpenstring. Elle marche pour répondre à toto. Nous avons réalisé un *.bat

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

      il génère un fichier tes-20031208.txt . Sous DOS en tapant help set
      tu auras l'aide en ligne.
      Zorti
      7
      1. Bonjour,

        Une petite précision concernant le manip avec les dates... Je viens de remarquer que malheureusement selon le système d'exploitation les résultats sont différents, voir même non fonctionnels. Il s'agit bien sur du "dos" qui peut être diffèrent selon si vous êtes sous ... win95, win98, win98SE ou 2000 ou XP.

        exemple sous 95 et certaines versions de 98 la fonction "date /T "ne fonctionne pas et il impossible d'avoir la date sans attente de réponse...(ce pourquoi le /T est fait je crois).

        Bon de toute façon il y a toujours une possibilité, voir même de chercher sur le net des fonctions Unix qui fonctionnent sous ms/dos.

        Bonne soirée
        2
        1. coucou tout le monde j'aimerais connaître quelques utilisations de dos pour programmer!
          qu'est ce qu'on peut faire avec dos?
          avez vous quelque programme?
          Peut on créer un fichier exe avec dos?
          merci d'avance pour vos réponse
          bonne année a tous et bone continuation!
          @+
          tom
          0
          1. Bonjour ;
            Comment renommer par un .bat le ficher
            e.txt en 12:59.txt
            e.txt : fichier à renommer
            12:59.txt : nom souhaité, 12:59 est l'heure courante
            Ce serait fabuleux pour automatiser des sauvegardes...
            0
            1. Bonjour à tous :)

              Je me suis servi de ce topic pour créer un batch de sauvegarde automatique.
              Le fichier à sauvegarder sera renommé avec la date puis l'heure.

              le code est le suivant :
              rename "%userprofile%\bureau\FICHIER.xls" FICHIER.xls_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%_%Time:~-11,-9%%Time:~-8,-6%%Time:~-5,-3%.xls


              ce qui donne un fichier nommé :
              FICHIER_20040420_114238.xls

              Tout fonctionne à merveille de 10h00.00 jusqu'à 23h59.59 :))
              Mais à partir du moment où le chiffre des dizaines (pour l'heure) passe à 0 (c'est à dire 00h, 01h, jusqu'à 09h), ça provoque une erreur :/

              FICHIER_20040420_

              Parce que la variable qui contient les dizaine est a moitié vide en fait ; elle est constituée de :
              %Time:~-11,-10% => chiffre de dizaines
              %Time:~-10,-9% => chiffre de unités
              Quand il n y a pas de dizaine, ben il y a autre chose que 1 ou 2, mais quoi?

              FICHIER_20040420_?14238.xls

              Quel est ce caractère??

              si je le sais, je peux le remplacer par 0 :

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


              Merci beaucoup de l'aide ou des conseils que vous pourriez m'apporter !
              4
              1. J'ai essayé de remplacer la variable en question : si elle ne contient ni 1 ni 2, je lui colle un 0 :)
                mais je ne peux meme pas faire de test dessus... :(
                au secours !!

                @Echo off
                SET dizaine=%Time:~-11,-10%
                @echo  var originale : %dizaine%
                IF %dizaine% == 1 goto fin
                IF %dizaine% == 2 goto fin
                SET dizaine=0
                GOTO fin
                :fin
                @echo var apres test : %dizaine%
                pause
                0
                1. Bonjour,
                  Sous quel Os est tu ? j'ai testé ton batch, mais apparement le zero n'existe pas dans %time%, donc le premiere caractere est... soit les dizaine soit les unités (donc pas possible a tester). Je jeterais un coup d'oeil sur ton probleme. A mon avis il faudrait commencer par tester le nombre de caractere avant les : (deux points). comment ? a voir...

                  Bonne journée
                  0
                2. Bonjour :)
                  j'utilise Win2k.

                  Donc, ce que tu me dis, c'est que quand je souhaite remplir la variable dizaine :
                  SET dizaine=%Time:~-11,-10%

                  elle contient soit 1 ou 2, soit elle n'est pas definie?
                  pourtant, quand j'affiche l'heure, il y a un "espace" :
                  _9:48
                  et pas
                  9:48
                  par contre quand je chercher à l'afficher elle toute seule, ça met effectivement une erreur je crois.

                  comment savoir ce qu'est ce fichu caractère? existe-t-il seulement? j'avoue que je suis franchement perdu, meme avec toute le bonne volonté du monde :/

                  je n'ai aucune idée de comment tester le nombre de caractère contenu dans une chaine :(

                  par contre, j'ai essayé un truc comme
                  if not defined set dizaine à 0

                  ça n'a point marché...

                  merci du coup de pouce :)
                  0
              2. Salut,
                Si vous voulez jouer avec les batch, essayez le site http://www.robvanderwoude.com/
                Vous aurez tout sur tout.

                A+
                1
                1. Bonjour Mbt,

                  Effectivement ce site semble trés interressant... Donc a mettre immédiatement dans les Favoris. Merci

                  Bonne soirée
                  0
              3. Bon voila une voie...
                essaye le batch suivant et modifie le en fonction de tes besoins...
                surtout pour la creation du fichier, je ne me suis pas occupé de cette partie la...

                c'est un peu tiré par les cheveux mais cela fonctionne...

                ______________________________________________________

                echo off
                rem *** mettre un zero devant lheure****
                set wcontrol=%time:~0,1%
                set wcontrol=A%wcontrol%B
                echo %wcontrol%

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

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

                :OK
                echo %time%.xls
                goto fin

                :FIN
                echo on


                ______________________________________________________

                Bon courage et tiens moi au courant
                0
                1. Juste une info comme ca en passant... Le probleme avec les commandes SET - DATE et TIME c'est la "non portabilite" dans certains cas. En effet, comme je le dis un peu plus haut, un batch comportant ces commandes risque de ne pas fonctionner sous W95 ou W98 ou 2000 ou bien XP, tout dépend de la version DOS qui est embarquée.
                  C'est pourquoi l'idéal serait, a mon avis, d'utiliser plutot des petites fonctions (ou programme exe et com) trouvées dans le monde Unix ou a faire soit meme, qui seraient utilisable sur n'importe quelle plateforme.

                  Si vous avez des idées dans ce sens... Je suis preneur. Merci par avance.

                  exemple vardate.exe retournerait, selon ses parametres une variables sous differentes forme JJ_mm_aa ou bien HH_jj_mm ou bien encore LUN (pour lundi=) etc. etc. etc.
                  0
                  1. Oufff à force de bricoler j'y suis arrivé :)
                    je propose le code suivant :

                    @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%\bureau\fichier.xls" fichier_%Date:~-4%%Date:~-7,-5%%Date:~-10,-8%_%dizaine%%Time:~-10,-9%%Time:~-8,-6%%Time:~-5,-3%.xls


                    MERCI beaucoup pour ton aide !!
                    et merci aussi pour l'excellent lien.
                    Bonne continuation :)
                    1
                    1. bonjour,
                      sous Win98, cela fontionne pas.
                      Je desire renommer un fichier avec la date du jour.
                      Tout ceci executé ds un .bat

                      qqu'un a une idée?
                      0
                      1. Pour récupérer la date (ou l'heure), sans utiliser de fichier tmp :

                        for /F "tokens=1* delims=@" ('date /T') do set date=%%a
                        delims=@ permet de tout récupérer dans une seule variable
                        sinon, on peut utiliser plusieurs délimiteurs et récupérer les champs individuellement.

                        pour avoir des explications : help for

                        ne fonctionne que sous W/NT et supérieur (pas sous W98)
                        0
                        1. Aaaaaaah enfin la solution qui marche sur mon système

                          Je commençais a désespérer ...

                          Merci Yazul
                          0
                      2. j'ai une base de données en sql server et je voudrais ajouter des données dans ujn certain nombre de table mais étant en Access XP. en fait je lie des tables à la base sql server par ODBC.quelle sécurité doi_je mettre sur les tables afin que ceci soit possible.
                        0
                        1. Un petit exemple de ce que l'on peut faire pour XP/2000
                          (adaptable pour d'autres versions; extensible pour le calcul de la date de pâques...)
                          Copier/coller les lignes suivantes dans un fichier texte à adapter selon les besoins:
                          @echo off
                          REM ==============================================================================================================
                          REM RECUPERATION DE LA DATE DE DERNIERE CLOTURE DES CAISSES D'UNE LISTE DONNEE
                          REM --------------------------------------------------------------------------------------------------------------
                          REM HISTORIQUE:
                          REM Création 26/05/2007 Philippe LEBLANC
                          REM Modification 28/05/2007 Philippe LEBLANC
                          REM Refonte du fait qu'en plannification de tâche aucune valeur n'est retournée par les sous-routines
                          REM ==============================================================================================================
                          setlocal EnableDelayedExpansion
                          title RECUPERATION DE LA DATE DE DERNIERE CLOTURE DES CAISSES D'UNE LISTE DONNEE

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

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

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

                          REM Fichier contenant la liste des caisses
                          set FichierCaisses=liste.csv
                          REM Fichier temporaire contenant la liste des caisses déjà traitées
                          set FichierTemp=liste.tmp
                          set Lecteur=C$
                          REM Répertoire de récupération
                          set Repertoire=winstore
                          set Chemin=%Lecteur%\%Repertoire%
                          REM Fichier ini
                          set FichierData=Transferts.ini

                          REM Récupération de la date et de l'heure
                          call :DateHeureSysteme
                          set Bissextile=0
                          set Semaine=0
                          set Journee=0
                          call :JourneeSemaineDate %Annee% %Mois% %Jour%
                          if "%Mois%" == "01" set NomMois=Janvier
                          if "%Mois%" == "02" set NomMois=Fevrier
                          if "%Mois%" == "03" set NomMois=Mars
                          if "%Mois%" == "04" set NomMois=Avril
                          if "%Mois%" == "05" set NomMois=Mai
                          if "%Mois%" == "06" set NomMois=Juin
                          if "%Mois%" == "07" set NomMois=Juillet
                          if "%Mois%" == "08" set NomMois=Aout
                          if "%Mois%" == "09" set NomMois=Septembre
                          if "%Mois%" == "10" set NomMois=Octobre
                          if "%Mois%" == "11" set NomMois=Novembre
                          if "%Mois%" == "12" set NomMois=Decembre
                          if "%Journee%"=="1" set NomJour=Lundi
                          if "%Journee%"=="2" set NomJour=Mardi
                          if "%Journee%"=="3" set NomJour=Mercredi
                          if "%Journee%"=="4" set NomJour=Jeudi
                          if "%Journee%"=="5" set NomJour=Vendredi
                          if "%Journee%"=="6" set NomJour=Samedi
                          if "%Journee%"=="7" set NomJour=Dimanche

                          REM Création du fichier log
                          set FichierLog=TransfertsIniCaisses_%aaaammjj%.log
                          echo %DateHeure% Debut de la récupération pour le %NomJour% >> %FichierLog%

                          REM Test de lancement sur présence du fichier contenant la liste des caisses
                          if not exist %FichierCaisses% (
                          echo %DateHeure% : Pas de récupération car le fichier contenant la liste des caisses %FichierCaisses% est absent. >> %FichierLog%
                          goto :SORTIE) else (echo.)
                          REM Test de lancement journalier selon le jour de la semaine
                          if "%NomJour%"=="Samedi" (
                          echo %DateHeure% : Pas de récupération planifiée le %NomJour%. >> %FichierLog%
                          goto :SORTIE) else (echo.)

                          REM Initialisation du fichier résultat
                          set FichierResultat=ResultatTransfertsIniCaisses_%aaaammjj%.txt
                          echo Caisse;DateCloture > %FichierResultat%

                          REM ----- BOUCLE ------------------------------------------
                          REM Boucle de lecture du fichier de la liste des caisses
                          for /F "tokens=1,2 delims=;" %%i in (%FichierCaisses%) do (

                          REM Test de l'indicateur 'déjà traité' du fichier de la liste des caisses
                          if %%j==O (echo %%i;O >> %FichierTemp%) else (

                          REM Connection avec la caisse
                          net use \\%%i\ipc$ /user:%USERADMIN% %ADMPASXP% || net use \\%%i\ipc$ /user:%USERADMIN% %ADMPAS2K%
                          if ERRORLEVEL 1 (
                          echo %DateHeure% : %%i non connectée >> %FichierLog%
                          echo %%i;N >> %FichierTemp%) else (

                          REM Récupération de la date de dernière clôture de la caisse
                          call :DateClotureCaisse \\%%i\%Chemin%\%FichierData% %%i

                          )
                          REM Fin de connection avec la caisse
                          net use \\%%i\ipc$ /d
                          )
                          REM Fin du test de l'indicateur 'déjà traité' du fichier de la liste des caisses
                          )
                          REM Fin de la boucle de lecture du fichier de la liste des caisses
                          REM -------------------------------------------------------

                          REM Mise à jour du fichier de la liste des caisses
                          copy /Y %FichierTemp% %FichierCaisses%

                          REM Récupération de la date et de l'heure
                          call :DateHeureSysteme

                          :SORTIE
                          REM Message de log
                          echo %DateHeure% Fin de la récupération pour le %NomJour% >> %FichierLog%

                          REM Suppression des fichiers temporaires
                          @del /q /f %FichierTemp%

                          REM Fin du traitement principal
                          goto :EOF
                          REM ==============================================================================================================

                          REM ----- SOUS-ROUTINE ------------------------------------
                          :DateClotureCaisse
                          REM -------------------------------------------------------
                          REM Récupération de la date de dernière clôture de la caisse
                          REM paramètres: nom du fichier de données, nom de la caisse selon le format 'VEG'
                          REM
                          call :DateHeureSysteme
                          REM ----- BOUCLE ------------------------------------------
                          REM Boucle de lecture du fichier de données:
                          REM Recherche de la date attribuée à la clause 'DateDerniereCloture='
                          REM Initialisation de la variable 'DateCloture', nulle si la clause n'est pas trouvée
                          for /F "tokens=1,2 delims==" %%g in (%1) do (if %%g == DateDerniereCloture set DateCloture=%%h)
                          REM
                          REM Test de la variable 'DateCloture':
                          REM Ecriture dans le fichier résultat si la variable est renseignée
                          REM Mise à jour du fichier temporaire contenant la liste des caisses déjà traitées
                          if "%DateCloture%"=="" (
                          echo %DateHeure% : Echec lors de la lecture de la date de clôture de la caisse %2 >> %FichierLog%
                          echo %2;N >> %FichierTemp%) else (
                          echo %2;%DateCloture% >> %FichierResultat%
                          echo %2;O >> %FichierTemp%)
                          REM
                          REM ----- Fin de la sous-routine
                          goto :EOF

                          REM ----- SOUS-ROUTINE ------------------------------------
                          :DateHeureSysteme
                          REM -------------------------------------------------------
                          REM Récupération de la date et de l'heure système
                          REM selon la version de l'OS, Windows 2000 ou 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 sous-routine
                          goto :EOF

                          REM ----- SOUS-ROUTINE ------------------------------------
                          :JourneeSemaineDate
                          REM -------------------------------------------------------
                          REM Récupération des éléments de date tels que
                          REM le jour bissextile de l'année,
                          REM le quantième de la semaine de l'année,
                          REM le quantième du jour de la semaine
                          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 sous-routine
                          goto :EOF
                          3
                          1. Bravo et merci Philippe, pour cet exemple généreux en terme de code et de commentaires, auquel je m'empresse de faire un copier/coller en cas de besoin.
                            Bonne journée.
                            3
                            1. Superbe réponse... agréable a lire, pas agressive et plein de politesse...
                              Maintenant tout le monde attend ton exemple, qui je suis sur, pourra servir aux autres.
                              0
                            2. Merci, j'ai proposé cela sur l'ensemble de sites de "CodeS-SourceS" et je me suis fais jeté ! sous prétexte que celà ne rentrait dans aucune rubrique...tans pis pour eux !#§@?
                              0
                            3. Merci Stern, j'ai fais au plus lisible et compréhensible par tous pour une maintenance facile.
                              Maintenant j'attends avec curiosité que tu tiennes ta parole en fournissant une optimisation de ce code ???
                              0
                          • 1
                          • 2