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 :

Copie sauf le dernier fichier modifié [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre régulier
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 9
    Par défaut Copie sauf le dernier fichier modifié
    Bonjour,

    Dans le cadre d'un projet, je souhaite sauvegarder et archiver des fichiers créé régulièrement par un logiciel. Jusqu'ici je passais par un logiciel classique de sauvegarde, mais je n'en suis pas pleinement satisfait. Je me suis donc tourné vers la création d'un script.

    Mon script aura plusieurs fonction :

    - Archiver (déplacer) des fichiers de plus de 21 jours dans un dossier d'archivage
    - Copier des fichiers ayant moins de 21 jours dans un dossier de sauvegarde
    - Ne pas copier le dernier fichier modifié

    Je me suis donc lancé dans la création d'un script avec le lancement quotidien d'un fichier.bat via le planificateur de tâches de windows. Malgré mon niveau débutant en programmation, j'ai réussi à créer ce projet :

    Code Batch : 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
    @echo off
    rem Sauvegarde et Archivage des fichiers
     
    rem Configuration
    set dossier_source=C:\ok\
    set dossier_archivage=c:\ok\old\
    set dossier_sauvegarde=c:\ok\copy\
    set nb_jours_avant_archivage=21
     
    rem Archivage des fichiers vieux de plus de xx jours
     
    forfiles /p %dossier_source% /m *.txt /c "cmd /c move @file %dossier_archivage%@file" /d -%nb_jours_avant_archivage%
     
    rem Suppression des fichiers vieux de plus de xx jours dans le dossier sauvegarde
     
    forfiles /p %dossier_sauvegarde% /m *.txt /c "cmd /c del @file" /d -%nb_jours_avant_archivage%
     
    rem Copie des fichiers modifié avant minuit vers le dossier de sauvegarde
     
    forfiles /p %dossier_source% /m *.txt /c "cmd /c copy @file %dossier_sauvegarde%@file" /d -1

    Je bloque cependant sur le fait de ne pas copier le dernier fichier modifié situé dans mon dossier source. J'ai contourné le problème en ne copiant pas les fichiers créés dans la journée (/d -1) mais ce n'est pas pleinement satisfaisant.

    Avez vous une idée pour que je puisse finaliser ce script ?

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Pour la dernière étape j'utiliserai plutôt ceci
    A tester avec des dossiers de tests

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    set dossier_source=C:\ok\
    set dossier_sauvegarde=c:\ok\copy\
     
    for /f "skip=1 tokens=*" %%a in ('dir "%dossier_source%*.txt" /b /a-d /o-d /tw') do copy "%%~a" "%dossier_sauvegarde%%%~nxa"
    pause

  3. #3
    Membre régulier
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 9
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Pour la dernière étape j'utiliserai plutôt ceci
    A tester avec des dossiers de tests

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    set dossier_source=C:\ok\
    set dossier_sauvegarde=c:\ok\copy\
     
    for /f "skip=1 tokens=*" %%a in ('dir "%dossier_source%*.txt" /b /a-d /o-d /tw') do copy "%%~a" "%dossier_sauvegarde%%%~nxa"
    pause
    Merci pour votre réponse, malheureusement je viens de tester le code et la commande me répond que "le fichier spécifié est introuvable"

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Peux tu mettre un echo devant la commande afin de vérifier la ligne

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    set dossier_source=C:\ok\
    set dossier_sauvegarde=c:\ok\copy\
     
    for /f "skip=1 tokens=*" %%a in ('dir "%dossier_source%*.txt" /b /a-d /o-d /tw') do echo copy "%%~a" "%dossier_sauvegarde%%%~nxa"
    pause

  5. #5
    Membre régulier
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 9
    Par défaut
    Avec le Echo, j'obtiens ceci en test rapide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Erreur*: Aucun fichier trouvé avec le critère de recherche spécifié.
    copy "test3.txt" "c:\ok\copy\test3.txt"
    copy "test2.txt" "c:\ok\copy\test2.txt"
    copy "test1.txt" "c:\ok\copy\test1.txt"
    Erreur*: Aucun fichier trouvé avec le critère de recherche spécifié.
    Appuyez sur une touche pour continuer...
    Les deux erreurs sont "normales" par rapport à la date des fichiers testés. Pour les fichiers à copier, la liste est bonne mais la commande ne réalise pas la copie.

    C'est le résultat de la commande ci dessous (quelque peu modifié par rapport au code batch inscrit plus haut) :


    Code batch : 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
    @echo off
    rem Sauvegarde et Archivage des fichiers vidéos
     
    rem Configuration
    set dossier_source=C:\ok\
    set dossier_archivage=c:\ok\old\
    set dossier_sauvegarde=c:\ok\copy\
    set nb_jours_avant_archivage=21
     
    rem Archivage des fichiers vieux de plus de xx jours
     
    forfiles /p %dossier_source% /m *.txt /c "cmd /c move @file %dossier_archivage%@file" /d -%nb_jours_avant_archivage%
     
    rem Copie des fichiers modifié avant minuit vers le dossier de sauvegarde
     
    rem forfiles /p %dossier_source% /m *.txt /c "cmd /c copy @file %dossier_sauvegarde%@file" /d -1
     
    for /f "skip=1 tokens=*" %%a in ('dir "%dossier_source%*.txt" /b /a-d /o-d /tw') do echo copy "%%~a" "%dossier_sauvegarde%%%~nxa"
     
    rem Suppression des fichiers vieux de plus de xx jours dans le dossier sauvegarde
     
    forfiles /p %dossier_sauvegarde% /m *.txt /c "cmd /c del @file" /d -%nb_jours_avant_archivage%
     
    pause

    Merci

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    La commande de copie te parait cohérente, en fonction des noms et emplacement de fichier ?

    D'ailleurs avec la commande il ne devrait y avoir qu'une copie, tu l'a lancé plusieurs fois ?

  7. #7
    Membre régulier
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 9
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    La commande de copie te parait cohérente, en fonction des noms et emplacement de fichier ?

    D'ailleurs avec la commande il ne devrait y avoir qu'une copie, tu l'a lancé plusieurs fois ?
    Oui ça me parait cohérent, je m'interrogeais juste sur le "copy "test1.txt" qui aurait pu être renseigné par un chemin complet du style "c:\ok\test1.txt", mais le problème ne vient probablement pas de là.

    J'ai lancé plusieurs fois le batch, mais j'ai eu a chaque fois le même message.

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Nous pouvons mettre le chemin absolu, si tu lance ton fichier bat depuis un autre dossier que dossier_source ca peut être le problème


    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    set dossier_source=C:\ok\
    set dossier_sauvegarde=c:\ok\copy\
     
    for /f "skip=1 tokens=*" %%a in ('dir "%dossier_source%*.txt" /b /a-d /o-d /tw') do copy "%dossier_source%%%~nxa" "%dossier_sauvegarde%%%~nxa"
    pause

  9. #9
    Membre régulier
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 9
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Nous pouvons mettre le chemin absolu, si tu lance ton fichier bat depuis un autre dossier que dossier_source ca peut être le problème


    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    set dossier_source=C:\ok\
    set dossier_sauvegarde=c:\ok\copy\
     
    for /f "skip=1 tokens=*" %%a in ('dir "%dossier_source%*.txt" /b /a-d /o-d /tw') do copy "%dossier_source%%%~nxa" "%dossier_sauvegarde%%%~nxa"
    pause
    Merci beaucoup c'est exactement ça, je lançais le bat à partir d'un autre dossier. Ça fonctionne parfaitement.

    Par contre je me rend compte, que si les fichiers sont déjà existants dans le dossier de copie, ils sont écrasés et de nouveau copiés. Vu la commande, c'est assez logique. Existe-t-il un moyen d'ignorer ces fichiers existants et de ne copier que les nouveaux fichiers contenu dans le dossier source ? Cela permettrait d'avoir une copie plus brève (je peux avoir plusieurs centaines de fichiers par jour) mais j'imagine que le code risque d'être beaucoup plus complexe.

  10. #10
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Si j'ai bien compris

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    set dossier_source=C:\ok\
    set dossier_sauvegarde=c:\ok\copy\
     
    for /f "skip=1 tokens=*" %%a in ('dir "%dossier_source%*.txt" /b /a-d /o-d /tw') do IF NOT EXIST "%dossier_sauvegarde%%%~nxa" copy "%dossier_source%%%~nxa" "%dossier_sauvegarde%%%~nxa"
    pause

  11. #11
    Membre régulier
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Janvier 2020
    Messages : 9
    Par défaut
    Merci beaucoup pour votre aide !

    Je n'ai plus qu'à planifier ma tache.

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

Discussions similaires

  1. [XL-2007] Ouvrir dernier fichier modifié d'un dossier
    Par Renato75 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/08/2013, 22h20
  2. [SP-2010] Webpart top 10, derniers fichiers modifiés
    Par diabli73 dans le forum SharePoint
    Réponses: 7
    Dernier message: 11/10/2011, 14h01
  3. recupération du dernier fichier modifié
    Par vince2005 dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2010, 15h27
  4. Réponses: 8
    Dernier message: 11/12/2007, 17h04
  5. copie des derniers fichiers crees
    Par captainamerica75 dans le forum VBScript
    Réponses: 3
    Dernier message: 29/08/2007, 10h34

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