209 votes

Comment supprimer dans Windows un fichier dont le nom est trop long ?

Ma femme possède plusieurs fichiers et dossiers dont les noms de fichiers sont devenus impossibles à supprimer par des moyens normaux ou par la ligne de commande. Je pense que les noms de fichiers sont trop longs en raison de la profondeur de la structure des dossiers. Quelqu'un connaît-il un bon utilitaire pour nettoyer des fichiers de ce type ?

0 votes

Comment ces fichiers ont-ils été créés ?

0 votes

Désolé pour mon ignorance sur ce sujet, mais Windows ne devrait-il pas gérer ces fichiers ? Ce que Will Eddins a posté ne devrait-il pas être fait automatiquement par Windows (même depuis l'explorateur) ?

2 votes

@Mokubai- La question dupliquée devrait être marquée comme étant un duplicata de celle-ci, car cette question est plus ancienne .

443voto

Greg Bielleman Points 108

Lorsque vous voulez supprimer complètement un répertoire et qu'il contient de longs chemins, robocopy fait un TRES bon travail :

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

Cela fonctionne parce que robocopy, en interne utilise les versions des fonctions Win32 compatibles avec l'Unicode, avec la fonction \\?\ préfixe pour les chemins de fichiers ; ces fonctions ont une limite de 2¹-1 (32 767) caractères au lieu de 259.

Vous devrez peut-être effectuer cette opération plusieurs fois pour vous débarrasser de tous les fichiers.

1 votes

Efficace quand il n'y a pas de nom court (8.3) stocké dans le système de fichiers.

0 votes

J'avais un nom de fichier 8.3, mais il ne fonctionnait pas. Ceci a fonctionné.

1 votes

Cela a bien fonctionné avec mon obstination pour le Windows Store. les fichiers de cache qui ont refusé d'être supprimés. Merci !

91voto

rck Points 845

Depuis une invite de commande :

dir /X

Vous obtiendrez ainsi la liste de vos fichiers/dossiers sous forme de noms courts. Utilisez ensuite le nom court exactement comme il est écrit pour supprimer le fichier :

del LONGF~1.txt

1 votes

J'aime bien celle-là, c'est une belle réflexion latérale.

0 votes

Bien que je ne puisse pas garantir que cela fonctionnera dans ce cas, je l'ai utilisé plusieurs fois pour supprimer des dossiers dont les caractères invalides à la fin les rendent impossibles à supprimer par des moyens normaux.

0 votes

Je viens d'utiliser cette technique pour supprimer un fichier dont le nom n'était pas valide - il s'agissait d'un fichier nommé "},". Cette astuce a permis de résoudre le problème. Merci Guard.

53voto

a.k. Points 31

J'avance progressivement dans le chemin, en renommant chaque dossier parent successif en "1" et en essayant de le supprimer. Vous raccourcissez effectivement le chemin à chaque fois et je n'ai jamais eu à travailler par plus de 4 ou 5 répertoires jusqu'à ce que je sois finalement capable de supprimer la structure de répertoire entière (ce qui peut ou non être ce que vous voulez). Vous pouvez également procéder à partir du dernier dossier enfant et remonter ou descendre.

7 votes

C'est la seule chose qui a fonctionné pour moi. Toutes les autres astuces données ici et dans d'autres forums comme celui-ci n'ont pas fonctionné.

0 votes

C'est la seule suggestion qui a fonctionné, bizarrement.

0 votes

Cela a fonctionné pour moi, un raccourci qui m'a aidé était mv * 1 && cd 1 . Cela n'a pas fonctionné lorsque plusieurs fichiers se trouvaient dans le répertoire, mais à ce stade, un fichier rm -rf * font généralement l'affaire.

15voto

AdamV Points 5934

Une astuce que j'ai utilisée pour contourner la limitation de la longueur du "chemin complet et du nom de fichier" afin de déplacer, copier ou supprimer quelque chose est de le raccourcir en le "cassant" à mi-chemin (ou plus). en utilisant une lettre de lecteur mappé pointant vers un dossier en bas du chemin. .

donc vous avez c : \some\long\path...\and\foo\bar\folders\oldfiles\myoldfile.txt.

Ensuite, mappez une lettre de lecteur arbitraire à un endroit du chemin de sorte que le premier morceau du chemin ne fasse que quelques caractères. Pré-requis - le dossier doit être dans un dossier partagé (ce qui peut déjà être le cas s'il est sur un serveur, ce qui est le cas lorsque j'ai eu besoin de faire cela), et s'il ne l'est pas déjà, choisissez un dossier quelque part dans le chemin et partagez-le. En fonction de votre environnement et de votre niveau de paranoïa, autorisez tout le monde à modifier l'accès au partage tant que les permissions NTFS sont raisonnablement restrictives. Si vous le souhaitez, n'autorisez les droits de modification qu'à votre propre compte.

Maintenant, allez dans le dossier partagé ou dans un de ses dossiers et partagez-le, ou utilisez la ligne de commande comme suit. Supposons que vous ayez partagé le dossier "foo" sous le nom de "fooshare", vous pourriez alors faire ceci

net use x: \\mycomputername\fooshare\bar\folders /persistent:no

et le lecteur X : pointe maintenant directement vers le dossier "folders" dans ce partage, donc "x : \oldfiles\myoldfile.txt " est maintenant assez court.

(Le "/persistent:no" signifie que cela ne survivra pas au prochain redémarrage et ne vous embrouillera pas plus tard. N'oubliez pas de dé-partager votre dossier lorsque vous avez terminé).

Rappelez-vous, vous n'avez pas nécessairement à partager le dossier contenant le fichier, s'il est déjà dans un dossier partagé, vous pouvez simplement mettre en correspondance par le biais de le partage et les dossiers imbriqués vers un dossier cible près de au fichier et cela fonctionne bien.

J'ai dû utiliser cette technique lors d'une robocopie massive entre deux serveurs lorsque nous nous sommes rendu compte que les utilisateurs avaient mappé des lecteurs assez profondément dans la structure des dossiers, et qu'ils avaient donc pu utiliser 255 caractères à partir de là, mais que cela dépassait la longueur totale du chemin d'accès au fichier lorsqu'on y accédait à partir de la racine du lecteur local.

4 votes

Vous pouvez éviter le partage en utilisant subst x: C:\Some\first\part\of\the\long\path et ensuite supprimer le lecteur avec subst x: /d

1 votes

Bien essayé mais quand vous avez des dizaines de milliers de dossiers imbriqués, ce n'est pas possible.

0 votes

El subst semble bien fonctionner, tant que le nom du fichier n'est pas donc pour qu'il dépasse 260 caractères, même à la racine d'un lecteur.

13voto

James Mertz Points 390

Dans certains programmes, dont l'Invite de commande ( cmd.exe ), vous pouvez contourner la limite de longueur du fichier en faisant précéder le chemin complet de la mention \\.\ comme ça :

\\\\.\\C:\\some directory\\other directory\\a file with long name

3 votes

Ne fonctionne pas sous Windows 10

0 votes

Merci, cmd a fonctionné à merveille avec cela sous Win7. rm -rf \\directoryname

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