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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    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
    Membre chevronné

    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
    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
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    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 Expert 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 : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    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

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 17
    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 Expert 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 : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    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
    )

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