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 Fichiers A vers B si NON present dans liste.txt


Sujet :

Scripts/Batch

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 30
    Par défaut Copier Fichiers A vers B si NON present dans liste.txt
    bonjour,

    je souhaiterai copier des fichiers d'un répertoire f:\AAA vers un répertoire f:\BBB suivant une liste dans un fichier texte.
    La condition pour que le fichier soit copié :
    il doit être biensur dans AAA mais il ne doit pas apparaître dans liste.txt..

    en fait il me faudrait ce script mais à l'envers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    IF NOT EXIST "f:\test1\%1\%2" (
    	MKDIR "f:\test2\%1\%2"
    	)
    
    for /f "tokens=*" %%a in (liste.txt) do (
         copy "f:\AAA\%1\%%a" "f:\BBB\%1\%2\" 
    )
    merci de votre aide.

  2. #2
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    Tu as 2 fichiers liste.txt ?

    1 contenant la liste des fichiers à copier et 1 la liste des fichiers déjà copiés ???

    C'est pas très clair. Donne un peu plus de détail, sur la finalité de ce script et comment tu va le lancer (apparement avec 2 paramètres, 2 repertoires....???)

    Amicalement

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 30
    Par défaut
    désolé..
    bon :
    j'ai un dossier AAA avec des fichiers.
    j'ai un dossier BBB vide ou avec des fichiers.
    j'ai un fichier Liste.txt qui est mis à jour via un autre batch et qui note le nom de chaque nouveaux fichiers qui sont déjà dans BBB.(dir /b >> liste.txt)

    ce que je veux, c'est copier les fichiers de AAA vers BBB.
    Mais avec 2 conditions :
    il faut que le fichier à copier soit dans AAA et absent de BBB
    MAIS aussi le nom de ce fichier ne doit pas être listé dans liste.txt.

    voila j’espère que j'ai été un peu plus clair..

  4. #4
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    Voilà le code pour ton problème. En fait tu set un switch à 1 si un de tes 2 tests est positif.

    Si ton switch est égal à 0 tu fait la copie.

    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
    23
    ::::Par SachaDee 19-03-2013
    
    @echo off
    cls
    
    :::::REPERTOIRE SOURCE
    set $rep_source=f:\AAAA
    
    :::::REPERTOIRE DESTINATION
    set $rep_destination=f:\BBBB
    
    dir %$rep_source% /aa /b>a_copie.txt
    
    set $switch=0
    setlocal enabledelayedexpansion enableextensions
    for /f "delims=" %%a in (a_copie.txt) do (
                                               if exist %$rep_destination%\%%a set $switch=1
                                               if !$switch!==0 for /f "delims= " %%b in (liste.txt) do (if /i %%a==%%b set $switch=1)
                                               if !$switch!==0 (copy %$rep_source%\%%a  %$rep_destination%
     					                    echo copie de %%a))
    
    endlocal
    Amicalement

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 30
    Par défaut
    J'ai modifié avec mes répertoires tests mais il ne se passe rien quand je lance..
    j'ai mis des fichiers dans test1, j'ai vidé liste.txt, il n'y a pas d'erreur mais pas de copie des fichiers..

  6. #6
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    creuse un peu, mets des echo et des pause pour situer le problème.
    J'ai testé le script, il fonctionnent. Regarde si a_copie.txt est bien créer.

    Si tu as compris le principe du programme ça ne devrait pas être trop compliqué !

    Si tu rames, avises-moi !

    Amicalement

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 30
    Par défaut
    Tu as raison !
    je suis reparti du début et j'ai vu mes erreurs quand j'ai remplacé mes nom de répertoires dans ton scripts.
    dans ta dernière ligne, j'ai changé l'echo.. : j'ai supprimer "copie de" pour que seul s’écrit le nom du fichier ou répertoire et j'ai remplacé > par >> pour que ça se mette à la suite.

    if !$switch!==0 (copy %$rep_source%\%%a %$rep_destination%
    echo %%a>>liste.txt))
    Mais...
    en gros ça marche 2 fois mais bizarrement quand je fais un 3eme test, ça ne fonctionne plus.. si je mets des nouveaux fichiers dans AAAA, il ne veut pas les copier !! ou alors il ne les note plus dans liste.txt.???

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 30
    Par défaut
    bon ba je relance ma demande d'aide..

    le script de Sachadee fonctionne une fois mais pas 2..
    si je rajoute encore des fichiers dans AAAA, la copie ne se fait plus..
    j'ai essayé plusieurs modif mais rien n'y fait..

    si quelqu'un à une autre idée, merci !

  9. #9
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    Voilà la correction (que t'aurais pû résoudre tout seul...)

    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
    ::::Par SachaDee 19-03-2013
    
    @echo off
    cls
    
    :::::REPERTOIRE SOURCE
    set $rep_source=f:\AAAA
    
    :::::REPERTOIRE DESTINATION
    set $rep_destination=f:\BBBB
    
    setlocal enabledelayedexpansion enableextensions
    
    for /f "delims=" %%a in ('dir %$rep_source% /aa /b') do ( set $switch=0
                                                              if exist %$rep_destination%\%%a set $switch=1
                                                              if !$switch!==0 for /f "delims= " %%b in (liste.txt) do (if /i %%a==%%b set $switch=1)
                                                              if !$switch!==0 (copy %$rep_source%\%%a  %$rep_destination%
     					                  echo %%a>>liste.txt))
    
    endlocal
    Il faut remettre le switch "$switch" à 0 à chaque itèration sinon il ne copie que le premier fichier....

    J'ai également supprimer la création du fichier "a_copie.txt" en incluant le "DIR" directement dans le "FOR". C'est plus "propre"

    Voilà test et dis-moi si c'est OK

    Amicalement

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 30
    Par défaut
    ok merci de ton aide.

    bon c'est bizarre.., ça fonctionne plus après plusieurs essais..
    1ere fois, je mets des fichiers dans AAAA ça fonctionne.
    2ème je remets 4 fichiers AAAA c'est toujours ok
    et puis à la 3ème tentative, je remets d'autre fichiers dans AAAA, il ne détecte pas les nouveaux fichiers et ne copie pas..

    par contre ils sont bien noté dans liste.txt donc si je relance il ne les copiera plus définitivement..
    il faudrait peut-être copier les fichiers avant de les noté dans liste.txt ?
    ou alors c'est plutôt a.copie.txt qui devrait mis à jour a la fin de la boucle ??

    je mets une pause à la fin de ton script pour voir ce qui se passe:
    j'ai aussi souvent ce message "le fichier spécifié est introuvable"..
    voila..

  11. #11
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    j'ai retesté mon code dans toutes les configurations et ça fonctionne parfaitement.

    Fait un copié collé du code corrigé que j'ai posté. Entre le nom de ton répertoire source et de destination avec les noms COURTS et retestes.

    Le fichier "a_copie" n'existe plus dans le code corrigé.

    Si cela ne marche toujours pas chez toi envoie un MP

    Amicalement

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 30
    Par défaut
    tu as de la patience ! merci.

    J'ai compris !..ça ne fonctionne pas quand il y a des espaces dans les nom des fichiers...
    autre chose, il faudrait que ça copie les répertoires et ce qui s'y trouve..

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 30
    Par défaut
    voici la modif pour que les fichiers avec espace soient aussi copiés:
    il faut rajouter des " sur cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if !$switch!==0 (copy "%$rep_source%\%%a"  %$rep_destination%
    par contre, pour les répertoires je n'y arrive pas..

  14. #14
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,
    tu dois inclure une nouvelle boucle "FOR" avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dir %$rep_source% /ad /b
    et faire un xcopy des répertoires.

    Amicalement

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 30
    Par défaut
    ok je fais comme ça.. bon il copie bien tous les fichiers même ceux qui sont dans les repertoires.. mais pas les répertoire eux-même:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    ::::Par SachaDee 19-03-2013
    
    @echo off
    cls
    
    :::::REPERTOIRE SOURCE
    set $rep_source=f:\AAAA
    
    :::::REPERTOIRE DESTINATION
    set $rep_destination=f:\BBBB
    
    setlocal enabledelayedexpansion enableextensions
    
    for /f "delims=" %%a in ('dir %$rep_source% /aa /b') do ( set $switch=0
                                                              if exist %$rep_destination%\%%a set $switch=1
                                                              if !$switch!==0 for /f "delims= " %%b in (liste.txt) do (if /i %%a==%%b set $switch=1)
                                                              if !$switch!==0 (copy "%$rep_source%\%%a"  %$rep_destination%
     					                  echo %%a>>liste.txt))
    endlocal
    :::::REPERTOIRE SOURCE
    set $rep_source=f:\AAAA
    
    :::::REPERTOIRE DESTINATION
    set $rep_destination=f:\BBBB
    
    setlocal enabledelayedexpansion enableextensions
    for /f "delims=" %%a in ('dir %$rep_source% /ad /b') do ( set $switch=0
                                                              if exist %$rep_destination%\%%a set $switch=1
                                                              if !$switch!==0 for /f "delims= " %%b in (liste.txt) do (if /i %%a==%%b set $switch=1)
                                                              if !$switch!==0 (xcopy /y "%$rep_source%\%%a"  %$rep_destination%
     					                  echo %%a>>liste.txt))
    
    endlocal
    pause

  16. #16
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    En fait tu dois recuperer chaque repertoire dans ton dossier source et
    pour chaque repertoire un relance le test de chaque fichier.

    Fait un copié collé de la partie en rouge et test

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    ::::Par SachaDee 04-04-2013
    
    @echo off
    cls
    
    
    :::::REPERTOIRE SOURCE
    set $rep_source=f:\AAAA
    
    :::::REPERTOIRE DESTINATION
    set $rep_destination=f:\BBBB
    
    if not exist %$rep_destination% md %$rep_destination%
    
    
    setlocal enabledelayedexpansion enableextensions
    
    for /f "delims=" %%a in ('dir %$rep_source% /aa /b') do ( 
                                                              set $switch=0
                                                              if exist %$rep_destination%\%%a set $switch=1
                                                              if !$switch!==0 for /f "delims= " %%b in (liste.txt) do (if /i %%a==%%b set $switch=1)
                                                              if !$switch!==0 (copy "%$rep_source%\%%a"  %$rep_destination%
     					                  echo %%a>>liste.txt))
    
    for /f "delims=" %%a in ('dir %$rep_source% /ad /b') do (
                                                              set $rep_source=%$rep_source%\%%a
                                                              set $rep_destination=%$rep_destination%\%%a
                                                              if not exist !$rep_destination! md !$rep_destination!
    			                                  for /f "delims=" %%a in ('dir !$rep_source! /aa /b') do (
                                                     set $switch=0
                                                     if !$rep_destination!\%%a set $switch=1
                                                     if !$switch!==0 for /f "delims= " %%b in (liste.txt) do (if /i %%a==%%b set $switch=1)
              				         if !$switch!==0 (copy "!$rep_source!\%%a"  !$rep_destination!
     					         echo %%a>>liste.txt)))
    
    
    endlocal
    Amicalement

Discussions similaires

  1. [Batch] Copier Fichiers A vers B si present dans liste
    Par Jord8 dans le forum Scripts/Batch
    Réponses: 12
    Dernier message: 05/01/2015, 19h00
  2. [XL-2007] Copier fichiers excel vers feuilles
    Par neogunnm dans le forum Excel
    Réponses: 4
    Dernier message: 04/02/2014, 14h55
  3. copier fichier text vers Excel implementé par VB.Net.
    Par sihammaster dans le forum VB.NET
    Réponses: 3
    Dernier message: 25/11/2009, 20h09
  4. fichiers .properties non presents dans un Jar Maven.
    Par scratch_1 dans le forum Maven
    Réponses: 1
    Dernier message: 14/10/2009, 17h25
  5. Copier fichiers excel vers un autre fichier
    Par bb62 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/10/2008, 16h15

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