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 :

Copier fichier en fonction de la date


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 21
    Points : 19
    Points
    19
    Par défaut Copier fichier en fonction de la date
    Bonjour,

    Je souhaite faire une copie toute bete avec quelques parametres de date
    Exemple :

    Je souhaite copier tous les fichiers anterieur a la date du 03-03-2009

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    echo Saisir la date de Copie MAximum FORMAT JJ-MM-AA
    echo Tous les fichiers Anterieur a cette date seront copie
    set /p ladate=
    echo Saisir le repertoire source FORMAT Z:\xx/xx
    echo ATTENTION LA SOURCE DOIT ETRE UN LECTEUR RESEAU 
    set /p lasource=
    echo Saisir le repertoire destination FORMAT Z:\xx/xx
    set /p ladestination=
    xcopy %lasource% %ladestination% /D:%ladate%  /S/E/W
    PAUSE
    Ma commande copie les fichiers posterieur a la date entré, comment obtenir l 'effet inverse ?

    Merci

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    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
    Déjà, regarde ce post : tes paramètres de date sont peut-être faux. Regarde aussi ce topic qui pourrait t'aider.

    Une solution est d'utiliser l'option /A (ou /M) de XCOPY, en ne mettant cet attribut QUE sur les fichiers "récents".

    Le code ci-dessous devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    REM Création de la liste des fichiers "plus récents".
    REM Le filtre sert à éliminer les commentaires inutiles de XCOPY.
    xcopy %lasource% %ladestination% /D:%ladate%  /S /E /W | find /i "%lasource%" > filelist.tmp
    REM On met l'attribut "Archive" à TOUS les fichiers de la source.
    pushd %1
    attrib +A *.* /S /D
    popd
    REM On supprime ce même attribut pour les fichiers de la liste créée précédemment.
    for %%I in (filelist.tmp) do attrib -a "%%I"
    REM Suppression du fichier temporaire, inutile désormais.
    del /q filelist.tmp
    REM Copie réelle, noter le "/A" en plus..
    xcopy %lasource% %ladestination% /D:%ladate%  /S /E /W /A
    En tout cas, c'est l'esprit du truc : marquer l'attribut ARCHIVE de façon adéquate.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    Merci de la réponse,

    En gros la fonction pushd va creer une copie temporaire de l'état de base du répertoire, puis les fichier sans l'attribut archive seront copié ?

    J'ai bon ?

    Mais pourquoi les variable %1 et %%I ne sont pas initialisé ?

    et de plus pouquoi deux xcopy cela signifit que la copie s'effectue en deux fois ?

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    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 jejeapollo Voir le message
    En gros la fonction pushd va creer une copie temporaire de l'état de base du répertoire, puis les fichier sans l'attribut archive seront copié ?
    Non : pushd mémorise le répertoire courant, puis passe dans le répertoire passé en paramètre. De l'autre côté, popd restaure le répertoire mémorisé. Les appels peuvent être imbriqués (pile interne), et surtout, cela permet de se contreficher de l'endroit où on va, on sait qu'on reviendra "tel quel".

    Citation Envoyé par jejeapollo Voir le message
    Mais pourquoi les variable %1 et %%I ne sont pas initialisé ?
    Elles le sont... %%I via la boucle FOR dont elle est l'indice, et %1 parce que c'est un sous-programme appelé via le CALL.

    Citation Envoyé par jejeapollo Voir le message
    et de plus pouquoi deux xcopy cela signifit que la copie s'effectue en deux fois ?
    Relis les commentaires : le premier (via le /L) ne fait QUE construire la liste des fichiers. C'est le second qui fait la "vraie" copie, en se basant sur l'attribut "Archive" via /A.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    Bon j'ai pu finalement arrivé aux 3/4 de c e que je veux faire

    Voila le code actuel :

    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
    @echo off
    echo Saisir la date de Copie Maximum FORMAT MM-JJ-AAAA
    echo Tous les fichiers Anterieur a cette date seront copie
    REM Creation des variable de stockage
    set /p ladate=
    echo Saisir le repertoire source FORMAT Z:\xx/xx
    echo ATTENTION LA SOURCE DOIT ETRE UN LECTEUR RESEAU 
    set /p lasource=
    echo Saisir le repertoire destination FORMAT Z:\xx/xx
    set /p ladestination=
    REM Copie de la structure
    xcopy %lasource% %ladestination% /D:%ladate% /S/E/L | find /i "%lasource%" > filelist.tmp
    REM attribution archive
    pushd %1
    attrib +A %lasource%/*.* /S /D
    popd
    for /F %%I in (filelist.tmp) do attrib -A "%%I"
    xcopy %lasource% %ladestination% /S /E /A
    REM suppression fichier temp et fichier copié
    DEL /Q filelist.tmp
    DEL /Q /AA "%lasource%\*.*"
    Seulement voila, si le script fonctionne correctement avec un dossier ne contenant que des fichiers, il en va autrement quand il y a des dossiers, la copie s'effectue sans tenir compte des dates. De plus le fichier temporaire ne stock pas les dossier en parametre.
    J'en conclut que l'attribut archive ne leur est pas donné...
    Il manque donc un argument mais je n'arrive à mettre le doigt dessus...

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    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
    Pfff, je crois bien que j'ai mélangé deux posts...

    XCOPY ne liste en effet pas les répertoires, et je ne pense pas non plus qu'il gère correctement les répertoires eux-mêmes... Par contre, le "attrib", lui, va effectivement poser l'attribut "+A" sur TOUS les fichiers et dossiers. Par contre, c'est l'attribut "-A" qui ne sera pas correctement positionné pour les répertoires.

    On pourrait tenter en rajoutant la liste des répertoires à filelist.tmp, mais "dir" ne permet pas cette opération de filtrage par date, "xcopy" n'affiche pas les répertoires, et comparer la date "manuellement" en batch va devenir infect assez rapidement.

    Là, le principe, c'est que les fichiers n'ayant PAS l'attribut Archive mis ne seront PAS copiés... Par défaut, donc, le batch présuppose que l'on va TOUT copier (le attrib +A général), et c'est le premier xcopy qui donne la liste des fichiers à exclure.

    Enlève (temporairement) l'effacement du "filelist.tmp", et vérifie s'il y a un fichier listé dedans qui est malgré tout copié. Si aucun fichier n'est copié sans ordre, c'est un fonctionnement normal. Sinon, faudra examiner un peu plus les dates et/ou passer par l'option "/exclude" de XCOPY, qui possède hélas quelques soucis car elle peut complètement masquer certains fichiers "légitimes".

    Essaie ça :
    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
    @echo off
    echo Saisir la date de Copie Maximum FORMAT MM-JJ-AAAA
    echo Tous les fichiers Anterieur a cette date seront copie
    REM Creation des variable de stockage
    set /p ladate=
    echo Saisir le repertoire source FORMAT Z:\xx/xx
    echo ATTENTION LA SOURCE DOIT ETRE UN LECTEUR RESEAU 
    set /p lasource=
    echo Saisir le repertoire destination FORMAT Z:\xx/xx
    set /p ladestination=
    REM Copie de la structure
    xcopy %lasource% %ladestination% /D:%ladate% /S /E /L | find /i "%lasource%" > filelist.tmp
    REM attribution archive
    pushd %lasource%
    attrib +A *.* /S /D
    popd
    for /F %%I in (filelist.tmp) do attrib -A /D "%%I"
    xcopy %lasource% %ladestination% /S /E /A
    REM suppression fichier temp et fichier copié
    DEL /Q filelist.tmp
    DEL /Q /AA "%lasource%\*.*"
    Modifs :
    • Modification du pushd.
    • Modification des "attrib".
    • Séparation des options de XCOPY (on ne sait jamais...).
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

Discussions similaires

  1. [Batch] Supprimer des fichiers en fonction de leur date
    Par charlix dans le forum Scripts/Batch
    Réponses: 55
    Dernier message: 05/10/2015, 17h18
  2. Ouvrir un fichier en fonction de la date
    Par Bastien06 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/03/2009, 17h49
  3. Supprimer des fichiers en fonction de la date sous DOS
    Par charlix dans le forum Windows
    Réponses: 0
    Dernier message: 21/03/2008, 08h18
  4. suppression fichier en fonction d'une date
    Par kalyparker dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 02/07/2007, 14h19
  5. Script de suppression de fichiers en fonction de la date
    Par yellow174 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 06/02/2006, 11h57

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