Batch - Copie de fichiers

Résolu/Fermé
gobiel Messages postés 945 Date d'inscription dimanche 27 juillet 2008 Statut Contributeur Dernière intervention 7 mars 2013 - 17 nov. 2009 à 21:28
 Utilisateur anonyme - 20 nov. 2009 à 23:44
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 :)
A voir également:

7 réponses

Utilisateur anonyme
18 nov. 2009 à 18:10
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
Utilisateur anonyme
20 nov. 2009 à 23:44
Maintenant tu sais ;)
Bonne soirée
+
3
Utilisateur anonyme
17 nov. 2009 à 22:07
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
plus simple : echo n|copy /y fichiers_source dossier_destination
0
Utilisateur anonyme > fiu
17 nov. 2009 à 22:49
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
fiu > Utilisateur anonyme
17 nov. 2009 à 23:02
pour sûr, j'ai loupé le -

=> echo n|copy /-y fichiers_source destination
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
17 nov. 2009 à 23:07
Là, on est d'accord ;)
0
gobiel Messages postés 945 Date d'inscription dimanche 27 juillet 2008 Statut Contributeur Dernière intervention 7 mars 2013 126
18 nov. 2009 à 13:17
Merci mais pourrais-tu m'expliquer ton code C_XX STP ?
0
gobiel Messages postés 945 Date d'inscription dimanche 27 juillet 2008 Statut Contributeur Dernière intervention 7 mars 2013 126
20 nov. 2009 à 21:09
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