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
Utilisateur anonyme - 20 nov. 2009 à 23:44
A voir également:
- Batch - Copie de fichiers
- Copie cachée - Guide
- Fichier batch - Guide
- Copie écran samsung - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Copie disque dur - Guide
7 réponses
Utilisateur anonyme
18 nov. 2009 à 18:10
18 nov. 2009 à 18:10
Hello!
Sans problème,
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.
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.
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.
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.
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.
Utilisateur anonyme
17 nov. 2009 à 22:07
17 nov. 2009 à 22:07
Salut,
Comme ceci ( fonctionne sur la comparaison de noms des fichiers.., pas le contenu ! )
Exemple de chemin: C:\mesfichiers
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
18 nov. 2009 à 13:17
Merci mais pourrais-tu m'expliquer ton code C_XX STP ?
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
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
Merci beaucoup pour tes explications, le sujet est définitivement clos :D