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

Windows Discussion :

[batch] creer repertoire dont le nom est la date :p


Sujet :

Windows

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 19
    Points : 16
    Points
    16
    Par défaut [batch] creer repertoire dont le nom est la date :p
    Bonjour,
    je n'ai pas trouvé de sujet qui soit plus approprié pour la programmation de batch windows.

    Je cherche à creer un batch de sauvegarde (copie de rep) déclanché frequement par le scheduler Windows.

    Mon probleme est tel que je voudrai que le nom des repertoire de destination de la copie comporte la date et l'heure de la sauvegarde.
    Ex : Save_Site_041130_15h45

    j'ai essayé :
    - xcopy x:\xxx\xxx z:\zzz\Save_Site_%date%_%time%
    - md z:\zzz\Save_Site_%date%_%time%

    Vous comprenez que cela servirai à conserver un historique des sauvegardes, et ne pas 'écraser' toujours le meme répertoire.

    Si vous pensez que cela est impossible en .bat, je me pencherai vers du dev. windev plus spécifique...

    Merci d'avance pour vos precieuses réponses.
    Yohann

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Possible en batch 2000/XP (extensions de commande nécessaires) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @ECHO OFF
    SETLOCAL
    SET DIRNAME=Save_Site
    FOR /F "tokens=1,2* delims=/" %%A IN ('DATE /T') DO SET DIRNAME=%DIRNAME% %%A-%%B-%%C
    FOR /F "tokens=1* delims=:" %%A IN ('TIME /T') DO SET DIRNAME=%DIRNAME%%%Ah%%B
    MD "%DIRNAME%"
    ECHO "%DIRNAME%" créé.

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Alors la je suis sur le cul...

    Bon ca marche en effet, rest à comprendre pourquoi.
    Je ne suis pas tres opérationnel pour ce qui est des commandes Win, alors je vais essayer de comprendre cela

    Merci encore

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Dis moi Mac LAK ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FOR /F "tokens=1,2* delims=/" %%A IN ('DATE /T') DO SET DIRNAME=%DIRNAME% %%A-%%B-%%C
    Quand je tappe ca en ligne de commande, il me dis que %%A etait inatendu (mdr sacré windows...) et %DIRNAME% n'a pas changé.

    Pourtant en batch.cmd ca à l'air de tourner

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut,
    le caractére % ne doit pas être doublé en ligne de commande !

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    OK impecable,
    J'ai pas mal arrangé à mes besoins (avec gestion d'erreurs et save à distance)
    Par contre, je voudrai juste savoir comment comparer le nom de fichiers d'un repertoir par rapport à une variable.

    SET STR="01_05h45"
    TANT QU'on a pas lu le nom de tous les fichiers dans le rep
    LIRE nom_fichier du rep c:\xxx\xxx\
    COMPARER %STR% à nom_fichier
    SI %STR% est pas dans nom_fichier
    SUPPRIMER fichier
    FINSI
    FINTANTQUE

    Tout ca pour garder les rep des saves effectuée le 1er de chaque mois à 5h45 (je purge, sinon disk full dans 5 jours )

    Je sais maintenat comment on utilise la boucle FOR, mais je ne vois pas comment la repeter si il reste des nom de fichier à lire.

    SET STR=01_5h45
    FOR [c:\test\] %STR% NOT IN %NOMFIC% DO DEL %FIC%

    Hummm... Pas simple le FOR...

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par elievar
    Par contre, je voudrai juste savoir comment comparer le nom de fichiers d'un repertoir par rapport à une variable.
    Utilise la commande FIND :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     rem recherche dans le fichier PL_truncate.txt l'occurence de la variable %1
    type PL_truncate.txt|find /I %1 > nul
    IF ERRORLEVEL 1 GOTO OK
    IF ERRORLEVEL 0 GOTO NOK
    goto error0
    ou Findstr sous XP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FindStr /I chaine file
    If Not ErrorLevel 1 Goto Skip1
    Echo ok
    :Skip1
    Citation Envoyé par elievar
    Hummm... Pas simple le FOR...
    FOR /?
    8)
    Si tu ne t'en sort pas communique-nous le script, c'est plus facile...

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Non j'ai du mal m'exprimer.

    Je recherche les fichiers d'un repertoire dont le nom contient "01_5h45".
    ex : Save_20041101_5h45.zip

    Pour cela, je doit scanner tout le repertoire.

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Donc c'est plustot ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CD /D X:Save_Directory
    For /F "Tokens=*" %%I in ('Dir *%STR%.zip /A-D /b /S') Do Echo Delete "%%I" 
    rem For /F "Tokens=*" %%I in ('Dir *%STR%.zip /A-D /b /S') Do Echo Delete %%I &Del /F/Q "%%I"

  10. #10
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par elievar
    Alors la je suis sur le cul...
    Moi aussi, mais c'est normal, je suis assis...

    Tu as une aide intégrale sur ces fonctions dans le centre d'aide XP (raccourci : Touche Win+F1), fais une recherche avec "Référence de la ligne de commande" y compris les guillemets, tu tomberas directement sur ce qu'il faut. Pense à mettre en favoris si besoin est.

    Sinon, les boucles FOR fonctionnent par découpage des chaînes de date et d'heure et "remplacent" les caractères invalides par des caractères compatibles, tout simplement. Regarde attentivement l'aide de la commande FOR dans le centre d'aide (c'est la même que celle obtenue par "FOR /?", mais en plus lisible).

    Pour chercher tous les fichiers contenant une chaîne PATTERN d'un répertoire SEARCHFOLDER, tu peux inclure ça dans ton batch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @ECHO OFF
    SETLOCAL
    SET SEARCHFOLDER=.\SaveXXXX
    SET PATTERN=01_5h45
    FOR %%F IN (%SEARCHFOLDER%\*%PATTERN%*) DO (
      ECHO %%F
      REM Et tout autre traitement additionnel...
    )
    A la place du couple ECHO/REM, tu mets ce que tu veux : le nom du fichier sera dans la variable "%%F".

  11. #11
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    C'est nickel,

    En plus j'ai tout compris

    Maintenant, j'ai plus qu'a inverser le processus (à savoir effacer si %STR% PAS dans la chaine 'Dir *%STR%* /AD /B')

    Merci pour votre coup de patte Mac LAK & Laurent D.
    En esperant vous revoir dans le coin

  12. #12
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Le tout n'est pas de trouver comment utiliser la commande (l'aide y est precieuse), mais surtout savoir laquelle utiliser

  13. #13
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par elievar
    En esperant vous revoir dans le coin
    J'suis à coté du radiateur
    Citation Envoyé par elievar
    mais surtout savoir laquelle utiliser
    C'est comme le reste, faut pratiquer.

  14. #14
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par elievar
    En esperant vous revoir dans le coin
    Ca devrait être assez facile... ;-)

    Citation Envoyé par Laurent Dardenne
    C'est comme le reste, faut pratiquer.
    Et parfois aussi avoir l'esprit un peu tordu, faut avouer...

  15. #15
    Membre habitué Avatar de ben_harper
    Inscrit en
    Juin 2006
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2006
    Messages : 141
    Points : 147
    Points
    147
    Par défaut
    Bonjour,

    j'ai utilisé les commandes pour créer mon répertoire avec la date.

    Seulement j'aimerais ensuite effectuer une copie de fichier dans ce répertoire date, mais je ne trouve pas comment lui indiquer le chemin vers ce répertoire.

    Quelqu'un aurait il une idée ?

    Merci d'avance.

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

Discussions similaires

  1. Module dont le nom est une variable
    Par Mr Hyde dans le forum Général Python
    Réponses: 11
    Dernier message: 26/02/2023, 20h39
  2. [Débutant] Créer un répertoire dont le nom est la date en visual basic express 2010
    Par debutant007 dans le forum VB.NET
    Réponses: 6
    Dernier message: 25/02/2015, 17h22
  3. Réponses: 6
    Dernier message: 08/02/2007, 14h41
  4. [POO] Désactiver un objet dont le nom est passé en parametre
    Par JavaEli dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/07/2005, 08h47
  5. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23

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