95 votes

Comment trouver les fichiers dont la longueur du chemin d'accès est supérieure à 260 caractères dans Windows ?

J'utilise un xcopy dans un script de Windows XP pour copier récursivement un répertoire. Je continue à obtenir une erreur 'Mémoire insuffisante', qui, d'après ce que je comprends, est due au fait qu'un fichier que j'essaie de copier a un chemin trop long. Je peux facilement réduire la longueur du chemin, mais malheureusement, je n'arrive pas à déterminer quels sont les fichiers qui violent la restriction de longueur du chemin. Les fichiers copiés sont imprimés sur la sortie standard (que je redirige vers un fichier journal), mais le message d'erreur est imprimé sur le terminal, ce qui fait que je ne peux même pas savoir approximativement pour quel répertoire l'erreur est donnée.

2voto

SeanC Points 13728

Vous pouvez rediriger stderr.

plus d'explication aquí mais avoir une commande comme :

MyCommand >log.txt 2>errors.txt

devrait permettre d'obtenir les données que vous recherchez.

De plus, Windows contourne cette limitation si le chemin est préfixé par \\?\ ( msdn )

Une autre astuce si vous avez une racine ou une destination qui commence par un long chemin, peut-être SUBST vous aidera :

SUBST Q: "C:\Documents and Settings\MyLoginName\My Documents\MyStuffToBeCopied"
Xcopy Q:\ "d:\Where it needs to go" /s /e
SUBST Q: /D

2voto

pollaris Points 517

TLPD ("too long path directory") est le programme qui m'a sauvé. Très facile à utiliser :

https://sourceforge.net/projects/tlpd/

1voto

housten Points 41

Aussi fou que cela puisse paraître, cette question est toujours d'actualité. Aucune des réponses ne m'a donné tout à fait ce que je voulais, mais E235 m'a donné la base. J'imprime également la longueur du nom pour voir plus facilement combien de caractères il faut couper.

Get-ChildItem -Recurse | Where-Object {$_.FullName.Length -gt 260} | %{"{0} : {1}" -f $_.fullname.Length,$_.fullname }

0voto

E235 Points 1677

Pour les chemins supérieurs à 260 :
que vous pouvez utiliser :

Get-ChildItem | Where-Object {$_.FullName.Length -gt 260}

Exemple sur 14 caractères :
Pour visualiser la longueur des chemins :

Get-ChildItem | Select-Object -Property FullName, @{Name="FullNameLength";Expression={($_.FullName.Length)}

Obtenez des chemins supérieurs à 14 :

Get-ChildItem | Where-Object {$_.FullName.Length -gt 14}  

Capture d'écran :
enter image description here

Pour les noms de fichiers supérieurs à 10 :

Get-ChildItem | Where-Object {$_.PSChildName.Length -gt 10}

Capture d'écran :
enter image description here

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