IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

problème de date


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut problème de date
    Bonjour à tous!
    J'ai un problème très bizarre, en faite j'ai créé un programme qui doit trier les fichiers xml d'un dossier selon la date. Ceux plus vieux de 3 mois sont supprimés, ceux ayant moins de 3 mois et ayant plus de 8 jours sont déplacés dans un autre dossier.
    Mon programme fonctionne bien sauf pour les mois de août et septembre, pour ces deux mois je ne peux pas faire de calcul avec le numéro du mois.
    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    @echo off
    title gestion des logs
    set cheminLogs=c:\essai
    set dateSys=%DATE%
    
    cd %cheminLogs%
    if EXIST lastTwoMonths goto move
    	mkdir lastTwoMonths 
    
    :move
    	for /f "tokens=3 delims=/ " %%b in ('date/t') do set mois=%%b
    	for /f "tokens=2 delims=/ " %%b in ('date/t') do set nbJour=%%b
    	for /f "tokens=4 delims=/ " %%b in ('date/t') do set annee=%%b
    
    	set /A annee=%annee%-1900
    	
    	set /A mois=12*%annee%+%mois%
    
    	set /A nbjour=365*%annee%+30*%mois%+%nbjour%
    
    for /r %%a in (*.xml) do (
    	set nom=%%a
    	call :traitement
    )
    
    :traitement
    	for /f "skip=4 tokens=1" %%a in ('dir "%nom%" /tw /-c /a:-d-s-h^|find /v "(s)"') do set dateModif=%%a
    
    	for /f "tokens=1 delims=/ " %%b in ('echo %dateModif%') do set jourModif=%%b
    	for /f "tokens=2 delims=/ " %%b in ('echo %dateModif%') do set moisModif=%%b
    	for /f "tokens=3 delims=/ " %%b in ('echo %dateModif%') do set anneeModif=%%b
    
    	set /A anneeModif = %anneeModif%-1900
    
    	set /A moisModif=12*%anneeModif%+%moisModif%
    	
    	set /A jourModif=365*%anneeModif%+30*%moisModif%+%jourModif%
    
    	set /A diffMois=%mois%-%moisModif%
    
    	if %mois% equ %moisModif% goto garder
    
    	if %diffMois% lss 3 goto garder
    	del %nom%
    	goto fin
    	rem passage à la fin de la boucle et passage au fichier suivant
    
    	:garder
    	set /A difference=%nbJour%-%jourModif%
    	
    	if %difference% lss 8 goto laisser
    	echo on déplace le log
    	move %nom% %cheminLogs%\lastTwoMonths
    	goto fin
    
    	:laisser
    	echo ce log n'est pas deplace
    
    	:fin
    voici mon erreur lors de la multiplication par le numéro de mois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Nombre non valide. Les constantes numériques doivent être soit décimales <17>, soit hexadécimales <0x11>, soit octales <021>
    Je suis en environnement windows 2000.

    Merci d'avance

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Je n'ai pas tout testé, mais tu as déjà une erreur de syntaxe d'attribution au début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @echo off
    title gestion des logs
    
    set dateSys=%DATE%
    
    
    	for /f "tokens=3 delims=/ " %%b in ('date/t') do set mois=%%b
    	for /f "tokens=2 delims=/ " %%b in ('date/t') do set nbJour=%%b
    	for /f "tokens=4 delims=/ " %%b in ('date/t') do set annee=%%b
    
    echo %nbjour%
    echo %mois%
    echo %annee%

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    désolé mais ton code ne fonctionne pas, il ne faut pas mettre de "%" autour de la variable lors de l'affectation

  4. #4
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Certainement un problème d'interpretation des nombres.
    Tu dois certainement avoir 08 et 09 hors pour dos c'est de l'octal et donc ce n'est pas valide.

    Pour t'en convaincre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     >set toto=07
     >set /A titi=toto*1
    7
     >set toto=08
     >set /A titi=toto*1
    0
     >set toto=09
     >set /A titi=toto*1
    0
     >set toto=10
     >set /A titi=toto*1
    10
    Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

    La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

    (\ _ /)
    (='.'=)
    Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    oui j'ai compris que 08 et 09 ca fesait de la merde mais comment résoudre ce problème??

    ya t-il possibilité d'éviter l'octal??

    en faite je pense qu'il faut que je trouve un système pour supprimer le 0 du début dans "08" ou "09" de cette manière j'aurais un nombre décimal égal à "8" ou "9" et je n'aurais donc plus aucun problème.
    Avez-vous une idée??

    merci

  6. #6
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Tu ne peux pas "éviter l'octal" comme tu dit. Pour Dos si ton nombre commence par 0 c'est de l'octal, si ça commence par 0x c'est de l'hexa et sinon c'est du décimal.

    Bref il faut effectivement que tu dégage le 0.
    Tu peux soit tester le premier caractère de ton mois et si c'est 0 tu l'enleve.
    Autre solution, tu ajoutes un caractère spécial devant ton mois (ex #). Tu fais une substitution de #0 par rien puis une autre de # par rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for /f "tokens=3 delims=/ " %%b in ('date/t') do set mois=#%%b
    set mois=%mois:#0=%
    set mois=%mois:#=%
    Le # c'est pour éviter de remplacer le 0 du 10. Tu peux aussi remplacer 08 par 8 et 09 par 9 mais ça fait autant de code.


    Sinon pourquoi tu fais 3 boucles pour récuperer jour, mois et année ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for /f "tokens=2,3,4 delims=/ " %%b in ('date/t') do (
      set mois=#%%c
      set jour=%%b
      set annee=%%d
    )
    Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

    La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

    (\ _ /)
    (='.'=)
    Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    La date est donnée en valeurs décimales

    Echo %DATE% retourne Jeu. 19/07/2007

    Le code que j'ai donné ci-dessus retourne
    19
    07
    2007

  8. #8
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Oui mais lorsqu'il extrait le mois avec sa boucle il se retrouve avec la chaine 08 pour le mois d'aout.

    Ensuite avec les set /A il interprete le 08 comme un nombre en octal. (il le fait aussi pour 01, 02, 03 ... mais la la valeur octale est la meme qu'en decimal).
    Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

    La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

    (\ _ /)
    (='.'=)
    Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Oui, ok
    J'ai relu ça va mieux

  10. #10
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Salut,

    Voici une petite astuce pour vous débarrasser du zéro initial dans les dates.
    Avec, vous pourrais faire des opérations sans risquer d'utiliser de fausses
    valeurs octales telles que 08 ou 09, qui pour rappel n'existe pas. En effet, en
    octale, après 07 vient ... 010.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cls
    set mois=08
    set /a mois=100%mois%%%100
    echo %mois%
    pause

  11. #11
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Bonjour,
    Un petit Up car je suis sur le même probléme, probléme qui me rend fou d'ailleurs.

    Je cherche à avoir l'année précédente sur deux nombre , à savoir 07
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set myYear00=%Date:~-2%
    Me donne 08, normal

    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set /A myYear00=%Date:~-2%-1
    erreur

    Nombre non valide. Les constantes numériques doivent être ...
    Je me sers de l'astuce suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set /A myYear00=100%Date:~-2%%100-1
    J'ai bien 7

    Le probléme c'est que si je mets tout cela dans mon point bat et que je double clic dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @echo off
    set /A myYear00=100%Date:~-2%%100-1
    echo %myYear00%
    pause
    Le résultat est
    1000799
    Merci pour votre aide

  12. #12
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Et tu voudrais quoi exactement comme résultat ? juste 07 ?

  13. #13
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    exactement juste 07

  14. #14
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    alor essaye ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @echo off
    set /A myYear00=100%Date:~-2%%100-1
    set myYear00=%myYear00:~3,2%
    echo %myYear00%
    pause

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Hello,

    Ma solution :

    if "%DATE:~0,1%" == "0" (set /a nbjour=%DATE:~1,1%) else (set /a nbjour=%DATE:~0,2%)
    if "%DATE:~3,1%" == "0" (set /a mois=%DATE:~4,1%) else (set /a mois=%DATE:~3,2%)
    set /a annee=%DATE:~6,4%

    echo %nbjour%
    echo %mois%
    echo %annee%

Discussions similaires

  1. Problème de date dans requête de màj imbriquée
    Par VirginieGE dans le forum Langage SQL
    Réponses: 11
    Dernier message: 20/07/2004, 15h34
  2. problème de date
    Par baboune dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 10/06/2004, 10h52
  3. Problème de date dans MONTHS_BETWEEN
    Par ghostlord79 dans le forum Oracle
    Réponses: 10
    Dernier message: 07/04/2004, 11h21
  4. Problème conversion date
    Par mat.M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2004, 15h05
  5. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 18h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo