Batch - Copie de fichiers

Résolu
gobiel Messages postés 1005 Statut Contributeur -  
 Utilisateur anonyme -
Bonjour, je souhaiterais savoir comment faire une copie de fichiers avec écrasement automatique seulement si les fichiers de source et destination sont différents.

Merci d'avance de me répondre :)

7 réponses

  1. Utilisateur anonyme
     
    Hello!
    Sans problème,

    SET "CheminFichiers=<le chemin des fichiers à copier, sans guillemets>"
    SET "CheminDestination=<le chemin de destination, sans guillemets>"


    Les deux premières lignes définissent 2 variables, on aurais pu mettre aussi directement les chemins d'accès dans le code, mais je ne l'ai pas fait car ce n'est pas ma manière de coder.

    FOR /F "TOKENS=*" %%A IN (' DIR /A-D/B/S "%CheminFichiers%" ') DO (


    DIR /A-D/B/S correspond à lister tous les fichiers dans tous les répertoires et sous repertoires ( /S ) de %CheminFichiers%, même si ils possèdent des attributs ( /A ), mais n'affiche pas les dossiers ( /-D ).
    A cette commande ci dessus, j'attribue son résultat à la variable %%A via une boucle ( FOR /F ) en listant même les fichiers ayant des espaces ( "TOKENS=*" ) , le résultat est donc stocké dans %%A le temps de la boucle.

    FOR /F "TOKENS=*" %%B IN (' DIR /A-D/B/S "%CheminDestination%" ') DO (
    

    Même principe que dessus mais avec %CheminDestination% .

    A ce niveau là, %%A correspond à tous les fichiers du chemin des fichiers à copier, et %%B correspond à tous les fichiers du chemin de destination des fichiers.

    		IF NOT EXIST "%%~DPB\%%~NXA" COPY /Y "%%A" "%%~DPB\%%~NXA" >NUL
    

    SI "<chemin des fichiers de destination>\<nom et extension du fichier à copier>" n'existent pas, ALORS effectuer la copie en forçant le remplacement ( /Y , pas forcement utile dans ce cas là vu qu'on à déja vérifié qu'il n'y aura pas de remplacement étant donné que le fichier n'existe pas ) et ne rien afficher à l'écran ( >NUL )

    ) )


    Je referme les deux parenthèses que j'ai ouvertes précédemment.
    4
  2. Utilisateur anonyme
     
    Maintenant tu sais ;)
    Bonne soirée
    +
    3
  3. Utilisateur anonyme
     
    Salut,
    Comme ceci ( fonctionne sur la comparaison de noms des fichiers.., pas le contenu ! )

    SET "CheminFichiers=<le chemin des fichiers à copier, sans guillemets>"
    SET "CheminDestination=<le chemin de destination, sans guillemets>"
    FOR /F "TOKENS=*" %%A IN (' DIR /A-D/B/S "%CheminFichiers%" ') DO (
    	FOR /F "TOKENS=*" %%B IN (' DIR /A-D/B/S "%CheminDestination%" ') DO (
    		IF NOT EXIST "%%~DPB\%%~NXA" COPY /Y "%%A" "%%~DPB\%%~NXA" >NUL ) )


    Exemple de chemin: C:\mesfichiers
    2
    1. fiu
       
      plus simple : echo n|copy /y fichiers_source dossier_destination
      0
      1. Utilisateur anonyme > fiu
         
        Re,
        Certes, mais ceci va quand même copier les fichiers même si il y a déjà des fichiers de même noms existants, donc en écraser le contenu.

        Le echo N, ne sert à rien.

        Si tu veux vérifier, fait le test.
        0
      2. fiu > Utilisateur anonyme
         
        pour sûr, j'ai loupé le -

        => echo n|copy /-y fichiers_source destination
        0
  4. fiu
     
    salut
    a ma connaissance, il n'existe pas de commande correspondant à ce que tu cherches, car le plus simple est de copier le fichier source quel que soit le cas de figure
    - si les fichiers etaient differents, ils sont ensuite identiques
    - si les fichiers etaient identiques, ils sont ensuite toujours identiques

    cette copie conditionnelle suppose de comparer le contenu de ces deux fichiers et de l'ecrire s'il y a difference.
    tu peux la coder avec
    1. comparaison des deux fichiers
    2. copie en fonction du code retour qui indique le succes ou non de la comparaison
    nb: cette methode rsique d'être couteuse en temps car si les differences se situent en fin de fichier, il aura fallu lire la quasi totalite des 2 fichiers pour detecter l'ecart puis lire la totalite en vue de la copie => on aura lu presque 3 fois le fichier a copier
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    Là, on est d'accord ;)
    0
  7. gobiel Messages postés 1005 Statut Contributeur 126
     
    Merci mais pourrais-tu m'expliquer ton code C_XX STP ?
    0
  8. gobiel Messages postés 1005 Statut Contributeur 126
     
    Je savais pas qu'on pouvait mettre une boucle dans une boucle... :O
    Merci beaucoup pour tes explications, le sujet est définitivement clos :D
    0