J'écris un script batch qui fait une copie. Je veux le script pour copier un dossier entier. Quand je veux copier un seul fichier, je le fais
copy %~dp0file.txt file.txt
Si j'ai un dossier avec cette structure, existe-t-il une commande pour copier tout ce dossier 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
si vous avez xcopy
, vous pouvez utiliser le paramètre /E
, qui copiera les répertoires et les sous-répertoires et les fichiers qu’ils contiennent, notamment en maintenant la structure de répertoires pour les répertoires vides.
xcopy [source] [destination] /E
L'ancienne manière:
xcopy [source] [destination] /E
xcopy est obsolète. Robocopy remplace Xcopy. Il est livré avec Windows 8, 8.1 et 10.
robocopy [source] [destination] /E
robocopy présente plusieurs avantages:
Plus de détails ici .
Je soupçonne que la commande xcopy
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 de répertoires d'origine. Il existe également une poignée d'options supplémentaires disponibles, par rapport à la commande de base copy
.
Découvrez la documentation ici .
Si votre fichier de commandes doit uniquement s'exécuter sur Windows Vista ou version ultérieure, vous pouvez utiliser robocopy
, outil encore plus puissant que xcopy
et intégré au système d'exploitation. Sa documentation est disponible ici .
J'ai été intéressé par la question originale Ici et les questions connexes.
Pour réponse, cette semaine, j’ai fait quelques expériences avec XCOPY.
Pour aider à répondre à la question initiale, voici Je publie les résultats de mes expériences.
J'ai fait les expériences sur Windows 7 64 bits 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 de macro d’éditeur Kexx avec L’éditeur de texte KEdit.
XCOPY a été appelé à partir du code Rexx. Le code Kexx a modifié la sortie d'écran de XCOPY pour se concentrer sur les résultats cruciaux.
Les expériences concernaient toutes l’utilisation de XCOPY pour copier un répertoire avec plusieurs fichiers et sous-répertoires
Les expériences consistaient en 10 cas . Chaque cas ajustait les arguments à XCOPY .__ et appelait XCOPY une fois. Les 10 cas ont tous été tentés par une tentative de copie identique
Voici les principaux résultats:
(1) Sur les 10 cas, seuls trois ont été copiés. Les 7 autres cas immédiatement, juste le traitement des arguments en XCOPY, ont donné des messages d'erreur, par exemple,
Invalid path
Access denied
sans fichiers copiés.
Sur les trois cas de copie, ils ont tous fait la même chose, c’est-à-dire qu’ils ont donné les mêmes résultats.
(2) Si vous souhaitez copier un répertoire X et tous les fichiers Des fichiers et des répertoires du répertoire X, .__ dans l'arborescence hiérarchique du système de fichiers .__, enracinés dans le répertoire X, alors, apparemment, XCOPY - et ce semble être une grande partie de la question initiale - ne fera tout simplement pas 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 NE PEUT PAS copier ledirectory X lui-même; perdez ainsi le tampon time-date sur le répertoire X, son bit archive, les données de propriété, les attributs , etc.
Bien sûr, si le répertoire X est un sous-répertoire Du répertoire Y, un XCOPIE de Y copiera Tout le contenu du répertoire Y WITHdirectory X. Ainsi, cette copie peut obtenir une copie .__ de. répertoire X. Cependant, la copie du.__ répertoire X aura son horodatage de l'heure d'exécution de XCOPY et NON, le timbre heure-date de l'originaldirectoire X.
Ce changement d'horodatage peut être Difficile pour une copie d'un répertoire avec Beaucoup de pages Web téléchargées: Le fichier HTML De la page Web aura son Original heure-date stamp, mais le sous-répertoire correspondant aux fichiers utilisésby le fichier HTML aura la date-heure stamp de l'exécution de XCOPY. Ainsi, lorsque Trie la copie sur l’horodatage, tous Les sous-répertoires, les fichiers HTML et les sous-répertoires correspondants, par exemple,
x.htm
x_files
peuvent apparaître très éloignés dans le tri le heure-date.
Les systèmes de fichiers hiérarchiques remontent à IIRC to Multics à MIT en 1969, et depuis Alors beaucoup de personnes ont reconnu les deux cas , Dans un répertoire X, (i) copiedirectory X et tout son contenu et (ii) copier tout le contenu de X mais pasdirectory X lui-même. Eh bien, ne serait-ce que grâce aux expériences, XCOPY ne fait que (ii).
Ainsi, les résultats des 10 observations sont inférieurs à . Pour chaque observation, dans les résultats, les trois premières lignes contiennent les trois premiers argumentsà XCOPY. Ainsi, la première ligne contient l’arborescencenom du répertoire à copier, le 'Source'; la deuxième ligne a l'arborescencenom du répertoire pour obtenir les copies, la 'destination', et la troisième ligne a les options pour XCOPY. Les lignes 1-2 restantes ont les résultats de l'exécution de XCOPY.
Un point important sur les options est que Options/X et/O résultent en résultat
Access denied
Pour voir cela, comparez le cas 8 avec les autres cas Qui étaient identiques, n’avaient pas /X et/O, mais ils copiaient.
Ces expériences m'ont permis de mieux comprendre XCOPY et d'apporter une réponse à la question initiale.
======= 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
Pour la copie de dossier, vous pouvez utiliser
robocopy C:\Source D:\Destination /E
Pour la copie de fichier
copy D:\Sourcefile.txt D:\backup\Destinationfile.txt /Y
Supprimer le fichier dans certains dossiers date de dernière modification plus d'un jour
forfiles -p "D:\FolderPath" -s -m *.[Filetype eg-->.txt] -d -[Numberof dates] -c "cmd /c del @PATH"
Et vous pouvez Shedule tâche dans Windows effectuer cette tâche automatiquement dans un délai précis.