63 votes

batch/bat pour copier le dossier et le contenu en une seule fois

J'écris un lot script qui fait une copie. Je veux script qu'il copie un dossier entier. Quand je veux copier un seul fichier, je fais ceci

copy %~dp0file.txt file.txt 

Si j'ai un dossier avec cette structure, existe-t-il une commande pour copier ce dossier entier avec son contenu en une seule fois tout en préservant la structure exacte.

mainfolder/
  file1.txt
  file2.txt
  insidefolder/
     file3.txt
     file4.txt 
     file5.txt

76voto

akf Points 23518

Si vous avez xcopy vous pouvez utiliser l'option /E param, qui copiera les répertoires et sous-répertoires et les fichiers qu'ils contiennent, y compris le maintien de la structure du répertoire pour les répertoires vides.

xcopy [source] [destination] /E

51voto

Vertexwahn Points 2095

L'ancienne méthode :

xcopy [source] [destination] /E

xcopy es déprécié . Robocopy remplace Xcopy. Il est livré avec Windows 8, 8.1 et 10.

robocopy [source] [destination] /E

robocopy présente plusieurs avantages :

  • les chemins de copie dépassant 259 caractères
  • copie multithread

Plus de détails aquí .

7voto

Cody Gray Points 102261

Je soupçonne que le xcopy La commande est la solution miracle que vous recherchez.

Il peut copier des fichiers, des répertoires et même des lecteurs entiers tout en préservant la hiérarchie des répertoires d'origine. Il y a également une poignée d'options supplémentaires disponibles, par rapport à la version de base de copy commandement.

Consultez le documentation ici .

Si votre fichier batch ne doit être exécuté que sur Windows Vista ou une version ultérieure, vous pouvez utiliser la méthode suivante robocopy à la place, ce qui est un outil encore plus puissant que xcopy et est maintenant intégré au système d'exploitation. Sa documentation est disponible aquí .

3voto

Pour la copie de dossier, vous pouvez utiliser

robocopy C:\Source D:\Destination /E

Pour la copie de fichiers

copy D:\Sourcefile.txt D:\backup\Destinationfile.txt /Y 

Suppression d'un fichier dans un dossier dont la date de dernière modification est supérieure à un jour donné.

forfiles -p "D:\FolderPath" -s -m *.[Filetype eg-->.txt] -d -[Numberof dates] -c "cmd /c del @PATH"

Et vous pouvez programmer une tâche dans Windows pour qu'elle soit exécutée automatiquement à un moment précis.

1voto

a_programmer Points 11

J'ai été intéressé par la question originale question originale et celles qui y sont liées.

Pour y répondre, j'ai fait cette semaine quelques expériences avec XCOPY.

Pour aider à répondre à la question originale, ici je publie les résultats de mes expériences.

J'ai fait les expériences sur Windows 7 64 bit Professional SP1 avec la copie de XCOPY fournie avec le système d'exploitation.

Pour les expériences, j'ai écrit du code dans le langage de script Open Object Rexx et le langage macro de l'éditeur Kexx avec l'éditeur de texte KEdit.

XCOPY a été appelé à partir du code Rexx. Le code code Kexx modifie la sortie écran de XCOPY pour se concentrer sur les résultats cruciaux.

Les expériences consistaient toutes à utiliser XCOPY pour copier un répertoire contenant plusieurs fichiers et sous-répertoires.

Les expériences ont consisté en 10 cas. Chaque cas ajustait les arguments de XCOPY et appelait XCOPY une fois. Les 10 cas étaient tentaient d'effectuer la même opération de opération de copie.

Voici les principaux résultats :

(1) Sur les 10 cas, seuls trois ont fait de la copier. Les 7 autres cas ont été traités immédiatement, juste après avoir traité les arguments de XCOPY, ont donné des messages d'erreur, par ex,

Invalid path

Access denied

sans qu'aucun fichier ne soit copié.

Sur les trois cas qui ont fait des copies, ils ont ont tous fait la même copie, c'est-à-dire qu'ils ont donné les mêmes résultats.

(2) Si vous souhaitez copier un répertoire X et tous les les fichiers et répertoires du répertoire X, dans l'arbre hiérarchique du système de fichiers ayant pour racine le répertoire X, alors apparemment XCOPY -- et cela semble être une grande partie de la la question originale -- ne le fera tout simplement cela.

Une conséquence est que si vous utilisez XCOPY pour copier le répertoire X et son contenu, alors peut copier le contenu mais pas le répertoire X lui-même. répertoire X lui-même ; ainsi, vous perdez l'horodatage l'horodatage du répertoire X, son bit d'archive, les données sur la propriété les attributs, etc.

Bien sûr, si le répertoire X est un sous-répertoire du répertoire Y, une XCOPY de Y copiera tout le contenu du répertoire Y AVEC le répertoire X. Ainsi, de cette façon, on peut obtenir une copie du répertoire X. Cependant, la copie du répertoire X aura son horodatage de l'heure de l'exécution de XCOPY et PAS l'horodatage de l'original répertoire X d'origine.

Ce changement dans l'horodatage peut être gênante pour la copie d'un répertoire contenant un beaucoup de pages Web téléchargées : Le fichier HTML de la page Web aura son horodatage son horodatage d'origine, mais le mais le sous-répertoire correspondant aux fichiers utilisés par le fichier HTML aura l'horodatage de la date de l'exécution de XCOPY. Ainsi, lors du trier la copie en fonction de l'horodatage, tous les les sous-répertoires, les fichiers HTML et les sous-répertoires sous-répertoires correspondants, par ex,

x.htm

x_files

peuvent apparaître très éloignés les uns des autres dans le tri sur date-heure.

Les systèmes de fichiers hiérarchiques remontent à loin, IIRC à Multics au MIT en 1969, et depuis beaucoup de gens ont reconnu les deux cas de figure, étant donné un répertoire X, (i) copier le répertoire X et tout son contenu et (ii) copier tout le contenu de X mais pas le le répertoire X lui-même. Eh bien, si seulement d'après les expériences, XCOPY ne fait que (ii).

Les résultats des 10 cas sont donc présentés ci-dessous. Pour chaque cas, dans les résultats, les trois premières trois premières lignes contiennent les trois premiers arguments à XCOPY. Ainsi, la première ligne contient l'arbre nom du répertoire à copier, la source' ; la deuxième ligne contient le nom de l'arbre du répertoire à copier, la 'source' ; la deuxième ligne a le nom de l'arbre du répertoire la 'destination', et la troisième ligne contient les options de XCOPY. Les 1-2 lignes restantes lignes restantes contiennent les résultats de l'exécution de XCOPY.

Un point important concernant les options est que les options /X et /O donnent un résultat

Access denied

Pour voir cela, comparez le cas 8 avec les autres cas qui étaient les mêmes, qui n'avaient pas /X et /O, mais qui ont copié.

Ces expériences m'ont permis de mieux mieux comprendre XCOPY et d'apporter une réponse à la question originale.

======= case 1 ==================
"k:\software\dir_time-date\"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_1\"
options = /E /F /G /H /K /O /R /V /X /Y
Result:  Invalid path
Result:  0 File(s) copied
======= case 2 ==================
"k:\software\dir_time-date\*"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_2\"
options = /E /F /G /H /K /O /R /V /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 3 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_3\"
options = /E /F /G /H /K /O /R /V /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 4 ==================
"k:\software\dir_time-date\"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_4\"
options = /E /F /G /H /K /R /V /Y
Result:  Invalid path
Result:  0 File(s) copied
======= case 5 ==================
"k:\software\dir_time-date\"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_5\"
options = /E /F /G /H /K /O /R /S /X /Y
Result:  Invalid path
Result:  0 File(s) copied
======= case 6 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_6\"
options = /E /F /G /H /I /K /O /R /S /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 7 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_7"
options = /E /F /G /H /I /K /R /S /Y
Result:  20 File(s) copied
======= case 8 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_8"
options = /E /F /G /H /I /K /O /R /S /X /Y
Result:  Access denied
Result:  0 File(s) copied
======= case 9 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_9"
options = /I /S
Result:  20 File(s) copied
======= case 10 ==================
"k:\software\dir_time-date"
"k:\software\xcopy002_test\xcopy002_test_dirs\output_sub_dir_10"
options = /E /I /S
Result:  20 File(s) copied

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X