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 de sorte que, au milieu d'une récursion, cette disposition 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"
De cette façon, à chaque niveau de Subst, un chemin plus court est généré. Cela signifie également que vous devez copier vos dossiers de manière séquentielle, afin de pouvoir vérifier les longs chemins avant d'exécuter la commande de copie.
Une fois tous les fichiers d'un dossier copiés, la récursivité recule d'un niveau (subst /d
), libérant ainsi une lettre de lecteur.
En utilisant 4 à 5 lettres de lecteur, qui se succèdent lorsque le chemin devient trop profond, j'ai pu copier des chemins dont la longueur dépassait la limite MAX_PATH.
EDIT
Il décrit la procédure générale de le faire avec subst. Comment vous le faites dépend de vos besoins, j'ai toujours utilisé ce petit truc secondaire dans un minimum, "résout ce problème" seul moyen. Par exemple, la copie vers un chemin cible également profond signifie que vous avez besoin d'une autre pile de lettres de lecteur substituées.
Déballer tous les fichiers .zip dans une structure de répertoire unique, profondément imbriqué peut exiger que sur la pile, mais vous devez raccourcir le seuil un peu pour tenir compte des dossiers dans le fichier .zip, etc.
Tout comme un ajout, Robocopy fait partie de Windows Vista (et probablement de Sever 2008 et toute version ultérieure de Windows). – OregonGhost
Je ne lis peut-être pas la documentation correctement, mais je ne vois pas comment vous pouvez utiliser robocopy pour copier sélectivement un seul fichier et sa structure de répertoire. Je l'ai testé sur un répertoire avec un chemin profond mais il semble que seuls les répertoires puissent être spécifiés et non des fichiers spécifiques. – llamaoo7