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