422 votes

Comment supprimer des répertoires dont les chemins/noms sont trop longs pour une suppression normale ?

Windows semble avoir une limite de longueur sur les noms de fichiers lorsqu'il essaie de les supprimer, bien que cela n'empêche pas ces fichiers d'être créés.

Notre processus de construction crée un certain nombre de fichiers temporaires (beaucoup sont construits à partir d'une WSDL) qui ne respectent pas cette limite. Notre ant script est en quelque sorte capable de les supprimer lors d'un nettoyage, mais parfois j'ai besoin de supprimer le répertoire workarea (où tous les fichiers temporaires vont) sans vraiment faire un nettoyage complet à partir de ant.

Ce sont les mêmes erreurs cette question Je ne sais pas toujours quels fichiers ou sous-répertoires spécifiques sont à l'origine du problème. Et j'essaie d'éviter tout processus manuel (autre que le déclenchement d'une commande unique) pour les supprimer réellement.

Si j'essaie de supprimer le répertoire à partir de l'Explorer, j'obtiens l'erreur suivante

Cannot delete [file name]: The file name you specified is not valid or too long.  
Specify a different file name

Essayer Remove-Item dans powershell donne l'erreur suivante :

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item  <<<< -force -Recurse <directory>

Quelqu'un connaît-il un outil ou un moyen facile de contourner cette erreur de suppression sans avoir à trouver manuellement les fichiers problématiques et à les déplacer/renommer ?

2 votes

J'ai trouvé la solution juste avant de poster cette question, mais comme d'autres peuvent rencontrer ce problème, j'ai décidé de la poster pour qu'ils puissent trouver la solution que j'ai trouvée.

0 votes

Oh, je sais, mais généralement, lorsque je fais ce genre de choses, je laisse la question "sans réponse" pendant un certain temps pour voir si quelqu'un d'autre a une meilleure solution.

0 votes

Par Far la solution la plus simple : youtube.com/watch?v=qQTyTprFAOg

8voto

Anatoly Mironov Points 931

J'aime la solution cmd. Mais je veux partager une autre solution qui fonctionne même dans l'Explorateur : essayez de raccourcir les noms des dossiers parents avant de les supprimer : des noms plus courts raccourciront le chemin. Disons que vous avez cette structure arborescente du dossier :

C:\

.. Projets

.. .. Quelques projets géniaux durant le Spring 2014.

.. .. .. Quelques activités dans le parc de la ville un vendredi

.. .. .. .. Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla

.. .. .. .. .. Fichiers réels avec des noms longs, aussi

Dans ce cas, vous ne pouvez pas supprimer les dossiers, vous ne pouvez pas non plus supprimer ou renommer les fichiers. Si vous souhaitez supprimer tout ou partie de la structure du dossier, vous pouvez temporairement renommer les dossiers parents et raccourcir le chemin, puis supprimer le dossier. Les noms peuvent être uniquement des lettres :

C:\

.. Projets

.. .. x

.. .. .. y

.. .. .. .. z

.. .. .. .. .. Fichiers réels avec des noms longs, aussi

Dans mon cas, je voulais juste supprimer le dossier entier avec de nombreux sous-dossiers et fichiers. Je ne me suis donc pas soucié du nom des dossiers.

1 votes

J'ai écrit un petit outil qui fait exactement cela et je l'ai mis sur GitHub. github.com/epsitec/Tools-RecursiveDelete

1 votes

Toutes les commandes ou Shift+DEL ne fonctionnent pas pour moi, mais ceci fonctionne.

0 votes

Cela ne fonctionne pas vraiment lorsque vous avez des dizaines de milliers de dossiers imbriqués.

4voto

Je propose Total Commandant (shareware, mais continue de fonctionner après la période d'essai avec seulement un écran de démarrage minimal). C'est de cette façon que je résous toujours le nom de fichier trop long problèmes.

1 votes

Merci mon Dieu, j'ai trouvé ça. J'ai des problèmes pour supprimer un dossier node_modules parce qu'il décide d'imbriquer bêtement les répertoires.

0 votes

Eh bien, @Alias, Total Commander rend ce problème plus facile à détecter, du moins pour moi. Après avoir identifié ce problème, chkdsk devrait le résoudre.

0 votes

La version 7.0 ne fonctionne pas, elle affiche un message d'erreur et suggère d'effectuer l'opération en tant qu'administrateur, ce qui échoue également.

2voto

Remi Despres-Smyth Points 1500

Vous pouvez également les supprimer en utilisant leur nom court équivalent. dir /x vous les montrera.

2voto

CamHart Points 196

J'ai créé un programme java simple qui utilise robocopy pour supprimer les fichiers. Le jar est exécutable. Pour une sortie supplémentaire, exécutez-le depuis la ligne cmd.

https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing

3 votes

Et si vous ne voulez pas utiliser Java, vous pouvez utiliser cet outil que j'ai écrit en utilisant .NET ( github.com/epsitec/Tools-RecursiveDelete ).

0 votes

@PierreArnaud grande utilité. J'avais besoin de quelque chose comme ça pour l'automatisation de la ligne de commande. @ CamHart bon travail de votre part aussi ! Merci à tous !

1voto

Arsham Points 388

J'ai essayé toutes les autres réponses, mais elles n'ont pas fonctionné (du moins pour moi).

Je suis tombé sur delinfile et a fonctionné assez bien et assez rapidement !

Sa version d'essai est limitée à 3 actions / 15 jours mais elle est utilisable si vous souhaitez seulement supprimer quelques dossiers/fichiers :

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X