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 :

Comparaison de dates de fichiers [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Par défaut Comparaison de dates de fichiers
    Bonjour,

    J'essaie d'écrire un batch qui me dirait listerait les fichiers d'un répertoire qui serait (ou qui ne seraient pas) à la date du jour.

    Je crois avoir compris tout ce qui est manipulation de dates mais là où je bute, c'est sur la comparaison et le listing.

    Les fichiers que je dois trier ont tous la même extension et certains noms de fichiers comportent des espaces, ce qui ne facilite pas la tâche.

    Bref, je comptais faire un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for /f %%B IN ('dir *.mdc') do (               
    set datf=%%B
    set jourf=%datef:~0,2%
    set moisf=%datef:~3,2%
    set anneef=%datef:~6,4%
    set jour=%date:~0,2%
    set mois=%date:~3,2%
    set annee=%date:~6,4%
    set datef=%jourf%%moisf%%anneef%
    set date=%jour%%mois%%annee%
    if not %datef%==%date% echo Le ficher %???% n'est pas a la date du jour.
    pause
    )
    Ce que je traduisais par :
    Pour chaque fichier à extension .mdc,
    On met la date en variable (car %%B du dir sans option sort les 1ers caractères jusqu'à un espace, donc la date du fichier),
    On extrait jour, mois et année de la date du fichier pour créer une suite de chiffres,
    On extrait jour, mois et année de la date du jour pour créer une 2ème suite de chiffres,
    On compare les 2 chaînes et si elles sont différentes on renvoie le nom fu fichier pour laquelle la condition se produit.


    Ma question : comment je récupère le nom du fichier ?

    Mais je m'aperçois que quand je lance le batch, la fenêtre se ferme alors que ça fonctionnait jusqu'avant que j'écrive ce post... J'ai du changer quelquechose et je ne vois plus quoi...

    HELP !

  2. #2
    Membre émérite
    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
    Par défaut
    Salut,

    Citation Envoyé par tonf Voir le message
    Dernière modification par tonf ; Hier à 21h22. Motif: orthographe
    Je n’ai pas regardé de très près, mais c'est un acte salutaire.

    Pour cette raison, voici un autre angle de vu bien mérité.

    L’un des avantages ici est de réduire aussi bien le temps d'exécution que le nombre de variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @echo off
    cd.>now.dt
    for /f %%i in ('echo now.dt') do for /f "tokens=1" %%j in ('echo %%~ti') do set dt=%%j
    for /f "tokens=*" %%k in ('dir /b /l /s /a-d *.mdc') do for /f "tokens=1" %%l in ('echo %%~tk') do if not "%%l"=="%dt%" echo %%k
    pause
    Au besoin, tu peux consulter l'aide en ligne de «for».
    Pour le reste, il me semble (à toi de voir) que c'est assez limpide.

    Bonne continuation.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Par défaut
    Merci, c'est parfait : beaucoup plus rapide et j'ai compris.

    Je m'en inspire de ce pas...

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Par défaut
    Pour aller plus loin, je dois comparer ce que retourne %%l avec les jours de la semaine.

    Je sais comment faire et pour cela j'ai besoin d'affecter ce résultat de %%l à une variable. Or, ça ne marche pas. Mon code en gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for /f "tokens=*" %%k in ('dir /b *.mdc') do for /f "tokens=1" %%l in ('echo %%~tk') do if not "%%l"=="%date%" (
    set datf=%%l
    echo %datf%
    )
    Cela m'indique "Commande echo désactivée".
    Pire, si j'indique entre les parenthèses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set datf=2
    echo %datf%
    J'obtiens le même message...
    Donc, en fait, je ne peux pas affecter de variable à cet endroit. Pourquoi ?

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Par défaut
    J'ai trouvé, il faut activer les expansions de variables avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocal enabledelayedexpansion
    .

    Donc, je continue et je re-bute.

    Dans la boucle, je veux calculer le jour Julien, mon code est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for /f "tokens=*" %%k in ('dir /b *.mdc') do for /f "tokens=1" %%l in ('echo %%~tk') do if not "%%l"=="%date%" (
      set datf=%%l
      rem Définition du jour de création des cubes non à jour
      set /a J=!datf:~0,2!
      set /a M=!datf:~3,2!
      set /a A=!datf:~6,4!
      set /a N=(1461 * (!A! + 4800 + (!M! - 14) / 12)) / 4 + (367 * (!M! - 2 - 12 * ((!M! - 14) / 12))) / 12 - (3 * ((!A! + 4900 + (!M! - 14) / 12) / 100)) / 4 + !J! - 32075
      set N%%=7
    Le "set" qui doit calculer le jour julien ne fonctionne pas dans la boucle, alors que j'utilise bien les "!" à la place des "%" (ça ne fonctionne pas non plus avec les "%"). Je ne peux pas lire le résultat, la fenêtre se ferme.

    Si je sors ce code de la boucle, ça fonctionne.

    Une idée ?

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Par défaut
    J'ai contourné le problème en faisant appel à une fonction externe à la boucle ( call : xxx), ça passe, même si ça ne m'explique pas pourquoi ça ne marchait pas.

    Prochaine étape, s'il y en a qui suivent, vérifier qu'une date sortie correspond bien au dernier dimanche... A votre bon coeur !

  7. #7
    Membre émérite
    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
    Par défaut
    Salut,

    Citation Envoyé par tonf Voir le message
    J'obtiens le même message...
    Donc, en fait, je ne peux pas affecter de variable à cet endroit. Pourquoi ?
    Citation Envoyé par tonf Voir le message
    J'ai trouvé, il faut activer les expansions de variables avec
    setlocal enabledelayedexpansion.
    .../...
    Je ne peux pas lire le résultat, la fenêtre se ferme.
    Si je sors ce code de la boucle, ça fonctionne.
    Une idée ?
    Citation Envoyé par tonf Voir le message
    J'ai contourné le problème en faisant appel à une fonction externe à la boucle ( call : xxx), ça passe, même si ça ne m'explique pas pourquoi ça ne marchait pas.
    Voici les informations qui te permettront d'y voir plus clair.

    enjoy;

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 137
    Par défaut
    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparaison de date dans un fichier excel
    Par elkhansa dans le forum VBScript
    Réponses: 0
    Dernier message: 18/09/2013, 17h45
  2. [XL-2003] Comparaison de date (nom d'un fichier) et date saisie dans Userform
    Par brunop3165 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/11/2009, 11h29
  3. [D7] Comparaison de dates d'accès de fichier
    Par johweb dans le forum Delphi
    Réponses: 2
    Dernier message: 18/01/2007, 14h45
  4. fichier.txt comparaison de dates
    Par maniolo dans le forum Langage
    Réponses: 3
    Dernier message: 11/10/2006, 15h14
  5. Problème de comparaison de dates
    Par MiJack dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/03/2004, 21h43

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