Comment automatiser la copie de fichiers avec des problèmes de chemin d'accès trop profonds dans Windows?

StackOverflow https://stackoverflow.com/questions/236533

  •  04-07-2019
  •  | 
  •  

Question

Je souhaite pouvoir copier de manière sélective une liste de fichiers et conserver leur structure de répertoires. Le problème est qu’il existe assez peu de fichiers dont le chemin dépasse 256 caractères. Comment ce problème est-il généralement traité?

Modifier: Je dois préciser que je ne veux que copier des fichiers de manière sélective, pas des dossiers. Je ne pense pas que robocopy puisse être utilisé efficacement pour copier un fichier individuel et sa structure de dossiers efficacement.

Était-ce utile?

La solution

J'ai écrit un VBScript qui vérifie la longueur du chemin et appelle subst dès qu'un certain seuil est atteint. Ces appels sont empilés les uns sur les autres afin qu’au milieu d’une récursivité, cette présentation existe:

C:\a\very\long\path
subst K: "C:\a\very\long\path"

K:\another\very\long\path
subst L: "K:\another\very\long\path"

L:\yet\another\very\long\path
subst M: "L:\yet\another\very\long\path"

xcopy M:\*.* "D:\target"

Ainsi, à chaque niveau de poste, un chemin plus court est généré. Cela signifie également que vous devez copier vos dossiers de manière séquentielle pour pouvoir vérifier les longs chemins avant d'émettre la commande de copie.

Une fois que tous les fichiers d'un dossier sont copiés, la récursivité revient d'un niveau ( subst / d ), ce qui libère une lettre de lecteur.

À l’aide de 4 à 5 lettres de lecteur, qui se substituaient lorsque le chemin devenait trop profond, j’avais été capable de copier les chemins dont la longueur était supérieure à la limite MAX_PATH.

EDIT

Ceci décrit la procédure générale pour le faire avec subst. Cela dépend de vos besoins. J’ai toujours utilisé ce petit truc dans la mesure du possible, pour "résoudre ce problème unique". façon.

Par exemple, la copie sur un chemin cible également profond signifie que vous avez besoin d'une autre pile de lettres de lecteur substituées.

La décompression de tous les fichiers .zip dans une seule structure de répertoire profondément imbriquée peut ne nécessiter que sur pile, mais vous devez raccourcir un peu le seuil pour prendre en compte les dossiers du fichier .zip, etc.

Autres conseils

Robocopy, élément de la ressource Windows. Kit est conçu pour traiter de tels cas.

Souhaitez-vous mettre en œuvre la procédure de copie pour vous-même? Si oui, avez-vous essayé les chemins UNC? Je n'ai jamais eu à travailler avec eux, mais en termes simples, vous utilisez un préfixe et le chemin peut être beaucoup plus long que MAX_PATH, comme indiqué dans cet article MSDN .

Un hack des temps anciens consiste à attribuer une lettre de lecteur à une partie du répertoire.

Une option est la commande SUBST. Cela vous permettra de remplacer une lettre de lecteur par une combinaison de lettre de lecteur et de chemin d'accès. J'ai constaté cela dans les packages d'installation pour obtenir une version plus courte du répertoire.

Vous pouvez également utiliser un dossier partagé et le mapper sur une lettre de lecteur. Ou vous pouvez utiliser le partage administratif.

Mais vraiment, si vous avez du code que vous pouvez exécuter, alors le manipuler est bien meilleur que ces hacks.

Comme l’a suggéré S & # 246; ren, essayez Robocopy:

robocopy empty_dir base_nested_dir /purge
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top