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 d'utilisation de la date système pour horodatage


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
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Par défaut Problème d'utilisation de la date système pour horodatage
    Bonjour à tous,

    Je souhaite horodater des fichiers reçus.
    Pour cela j'utilise un script:

    set TSTAMP=%TIME:~0,2%%TIME:~3,2%00
    echo %TSTAMP%
    set /A TSTAMP="TSTAMP + 1000000"
    echo %TSTAMP%
    set TSTAMP=%TSTAMP:~1,7%
    echo %TSTAMP%
    Celui - ci fonctionne correctement sauf de 00h01 à 00h59.

    En fonctionnement normal, à 01h05 par exemple, voici le résultat du script:

    C:\GDEC>set TSTAMP= 10500
    C:\GDEC>echo 10500
    10500
    C:\GDEC>set /A TSTAMP="TSTAMP + 1000000"
    C:\GDEC>echo 1010500
    1010500
    C:\GDEC>set TSTAMP=010500
    C:\GDEC>echo 010500
    010500
    Par contre, le même script mais lancé à 00h32 par exemple, voici le résultat:

    C:\GDEC>set TSTAMP= 03200
    C:\GDEC>echo 03200
    03200
    C:\GDEC>set /A TSTAMP="TSTAMP + 1000000"
    C:\GDEC>echo 1001664
    1001664
    C:\GDEC>set TSTAMP=001664
    C:\GDEC>echo 001664
    001664
    Je n'arrive pas du tout à comprendre pourquoi mon set /A TSTAMP="TSTAMP + 1000000" à 00h32 me retourne comme valeur: 1001664 au lieu de 1003200 ?

    Quelqu'un aurait--il une petite idée?

    Merci d'avance et bonne journée.

  2. #2
    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
    Je l'aime bien ce petit bug, il y a moyen de passer super longtemps dessus sans trouver.

    Bref pour faire durer le supsens disons que 1664 = 03200 donc le compte est bon
    Par contre 1664 != 3200, rien à voir


    En fait lorsque tu met un 0 devant un nombre cela signifie que le nombre est en base 8. Et 3200 en base 8 vaut 1664 en base 10. CQFD !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Par défaut
    J'avoue que je ne t'ai pas suivi

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Par défaut
    Avec ta remarque, j'ai adapté mon script pour zappé les zéros entre 00h00 et 00h59.
    Cela fonctionne correctement.

    Maitenant jme demande juste si il n'y a pas plus rapide (ne pas faire mon addition en base 8 mais en base 10?)

  5. #5
    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
    Citation Envoyé par cycy75 Voir le message
    Avec ta remarque, j'ai adapté mon script pour zappé les zéros entre 00h00 et 00h59.
    Cela fonctionne correctement.

    Maitenant jme demande juste si il n'y a pas plus rapide (ne pas faire mon addition en base 8 mais en base 10?)
    Ben ça dépend ce que tu veux faire. J'avoue ne pas bien comprendre à quoi sert ton addition. Au final tu ajoutes simplement un 0 au début non ?

  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
    Essayons d'être plus clair avec un exemple :

    Y:\>set TSTAMP=03200

    Y:\>echo %TSTAMP%
    03200

    Y:\>set /A TSTAMP=TSTAMP
    Y:\>echo %TSTAMP%
    1664

    Que s'est-il passé ????
    Dans le premier cas, le set indique une chaine de caractère, donc on retourne bien 03200
    Dans le second cas, le /A indique qu'on a affaire à un nombre, du coup le script évalue le nombre. Et comme tu as 03200 et non 3200, ton nombre est interprété comme un nombre en octal (base 8) et est donc converti en décimal : 1664.


    Si tu veux t'en convaincre encore plus essaye ceci :
    set /A TSTAMP=08
    J'espère que c'est plus clair.

Discussions similaires

  1. [E-03] Se référer à la date système pour créer des conditions
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/02/2009, 16h08
  2. Problème d'utilisation du plugin de VLC pour mozilla
    Par Alasea dans le forum Services
    Réponses: 0
    Dernier message: 19/06/2008, 11h09
  3. Réponses: 11
    Dernier message: 24/07/2007, 15h14
  4. [Système] Problème d'utilisation system()
    Par thierrybatlle dans le forum Langage
    Réponses: 3
    Dernier message: 04/06/2007, 13h52
  5. Problème avec prog modifiant la date et l'heure système
    Par eldesir dans le forum Assembleur
    Réponses: 1
    Dernier message: 19/01/2007, 20h39

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