Comment supprimer un fichier sous Windows avec un nom de fichier trop long? [dupliquer]

202

Ma femme possède plusieurs fichiers et dossiers dont les noms de fichiers ont fini par être effacés (ne peuvent pas être supprimés) par des moyens normaux ou via la ligne de commande. Je pense que les noms de fichiers sont trop longs en raison de la profondeur des structures de dossiers. Est-ce que quelqu'un connaît un bon utilitaire pour nettoyer des fichiers comme celui-ci?

utilisateur3048
la source
Comment ces fichiers ont-ils été créés?
Nick
Désolé de mon ignorance sur ce sujet, mais Windows ne devrait-il pas gérer ces fichiers? Est-ce que ce que Eddins va publier ne devrait pas être fait automatiquement par Windows (même à partir de l'explorateur)?
Stefanos Kalantzis
2
@ Mokubai- La question en double doit être marquée comme une copie de celle-ci, car cette question est plus ancienne .
Thomas
1
@cybermonkey: Et la réponse est meilleure.
Ellesedil
Pour d'autres lecteurs, la méthode 7zip avec CTRL+DELETE est la méthode la plus simple à mon avis ...
Christian Gollhardt

Réponses:

426

Lorsque vous souhaitez supprimer complètement un répertoire contenant des chemins d'accès longs, faites robocopyun très bon travail:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

Cela fonctionne car robocopy utilise en\\?\ interne les versions Unicode des fonctions Win32, avec le 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 suivre ce processus plusieurs fois pour vous débarrasser de tous les fichiers.

Benoit
la source
1
Efficace lorsqu'il n'y a pas de nom court (8.3) stocké dans le système de fichiers.
Antoine RODRIGUEZ
1
Cela a bien fonctionné avec mes fichiers de cache persistants du Windows Store qui refusaient d'être supprimés. Merci!
Samir
1
J'ai dû ajouter / purger la ligne robocopy pour que cela fonctionne, mais cela a fonctionné après
actionshrimp le
3
Robocopy est ce qui m'a mis dans ce pétrin, mais il ne m'est jamais venu à l'idée d'utiliser Robocopy pour m'en sortir. Très bonne réponse! Merci!
Jay Michaud
2
@SarahofGaia, mon diable, c'est 2¹⁶ - 1 en fait
Benoit
91

À partir d'une invite de commande:

dir /X

Ceci listera vos fichiers / dossiers en format de nom court. Ensuite, utilisez le nom abrégé exactement comme écrit pour supprimer le fichier:

del LONGF~1.txt
Will Eddins
la source
1
J'aime celui-là, c'est un peu une pensée latérale.
Col
Bien que je ne puisse pas garantir que cela fonctionnera dans ce cas, je l'ai utilisé plusieurs fois pour supprimer des dossiers contenant à la fin des caractères non valides qui les rendent impossibles à supprimer par des moyens normaux.
Will Eddins
1
Cela fonctionne pour les fichiers et les dossiers du répertoire en cours, mais si vous réussissez à vous retrouver dans un dossier dont le chemin est trop long, cela ne vous aidera pas. Par exemple, je suis actuellement dans une console sur un chemin trop long et je ne peux même pas dirou cd ...
Bobson
1
@Bobson Si vous ne pouvez pas dirutiliser à la pushdplace. Cela a fonctionné pour moi.
BadHorsie
4
Cela ne fonctionne pas avec Windows 10, le nom de fichier affiché est le nom long
Loenix
53

Je progresse progressivement dans le chemin en renommant chaque dossier parent successif en "1" et en tentant de le supprimer. Vous raccourcissez effectivement le chemin à chaque fois et je n'ai jamais eu à travailler avec plus de 4 ou 5 répertoires jusqu'à ce que je puisse enfin supprimer toute la structure de répertoires (ce qui peut être ou ne pas être ce que vous voulez). Vous pouvez également le faire depuis le dernier dossier enfant et monter ou descendre.

joeqwerty
la source
7
C'était la seule chose qui a fonctionné pour moi. Toutes les autres astuces données ici et dans d'autres forums tels que celui-ci ne fonctionnaient pas.
Andrew Arnott
Était la seule suggestion qui a fonctionné assez curieusement.
Nestor Ledon
Cela a fonctionné pour moi, un raccourci qui m'a aidé était mv * 1 && cd 1. Cela ne fonctionnait pas lorsque plusieurs fichiers se trouvaient dans le répertoire, mais à ce moment-là, c'était rm -rf *généralement l'astuce.
Alexander Varwijk
1
Impossible de le faire dans Windows 10 ... renommer génère une erreur de type "nom de fichier en long"
Dawesi
3
Non seulement cela a résolu le problème pour moi, mais cela explique également comment j'ai réussi à résoudre le problème. Je devais avoir un chemin proche de la limite, puis j'ai renommé un dossier parent (ajouté quelque chose comme "backup Nov 2016 save" au nom), ce qui a poussé les fichiers dans les sous-dossiers au-delà de la limite. C'est bien de connaître la cause ainsi que la solution, même si je sais que cela peut se produire d'une autre manière aussi, je pense que c'est une façon courante pour les gens.
Eselk
13

Dans certains programmes, y compris Invite de commande ( cmd.exe), vous pouvez contourner la limite de longueur de fichier en préfixant le chemin complet avec le \\.\code suivant:

\\. \ C: \ un répertoire \ autre répertoire \ un fichier avec un nom long
Grawity
la source
3
ne fonctionne pas dans Windows 10
Dawesi
merci, cmd a travaillé un charme avec cela dans Win7rm -rf \\directoryname
Philip Pryde
13

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

vous avez donc c: \ certains \ long \ chemin ... \ et \ foo \ bar \ dossiers \ oldfiles \ myoldfile.txt.

Mappez ensuite une lettre de lecteur arbitraire sur un chemin le long du chemin afin que le premier bloc du chemin ne contienne que quelques caractères. Pré-requis - le dossier doit être dans un dossier partagé (ce qui est peut-être déjà le cas s'il se trouve sur un serveur, ce qui est l'endroit où j'ai eu besoin de le faire), et s'il ne l'est pas déjà, choisissez un dossier quelque part dans le chemin. et le partager. 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 autorisations NTFS sont raisonnablement restrictives. Si vous le souhaitez, n'autorisez que les droits de modification sur votre propre compte.

Allez maintenant dans le dossier partagé ou dans un dossier et partagez-le, ou utilisez la ligne de commande comme suit. Supposons que vous partagiez le dossier "foo" en tant que "fooshare", alors vous pourriez le faire

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

et le lecteur X: pointe maintenant directement sur le dossier "dossiers" à l'intérieur de ce partage, de sorte que "x: \ oldfiles \ myoldfile.txt" est maintenant assez court.

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

N'oubliez pas que vous n'avez pas nécessairement besoin de partager le dossier contenant le fichier. S'il se trouve déjà dans un dossier partagé, vous pouvez simplement mapper via le partage et les dossiers imbriqués vers un dossier cible situé à proximité du fichier.

J'ai dû utiliser cette technique en effectuant une grande opération de copie entre deux serveurs lorsque nous nous sommes rendus compte que les utilisateurs avaient des lecteurs mappés assez profondément dans la structure des dossiers, ils ont donc pu utiliser 255 caractères à partir de là, mais dépassaient la longueur totale du chemin du fichier lors de l'accès à partir de la racine du disque local.

AdamV
la source
4
vous pouvez éviter le partage en utilisant subst x: C:\Some\first\part\of\the\long\pathet ensuite supprimer le lecteur avecsubst x: /d
mihi
1
Bien essayé mais quand vous avez 10 dossiers de dossiers imbriqués, ce n'est pas possible.
Julian Knight le
L' substastuce semble bien fonctionner, aussi longtemps que le nom n'est pas si longtemps à le faire avancer plus de 260 caractères , même à la racine d'un lecteur.
Stephen Chung
Vous n'avez également pas besoin de partager explicitement un dossier avec net use, vous pouvez utiliser les partages d'administration par défaut:net use x: \\localhost\c$\bar\folders /persistent:no
kapex
9

Le moyen le plus simple que j'ai trouvé est de démarrer à partir d'un live CD d'ubuntu.

Sinon, vous pouvez créer un dossier partagé à mi-chemin du chemin, puis y mapper un lecteur réseau et le supprimer du dossier mappé (même sur le même ordinateur).

Col
la source
17
C'est curieux de voir combien de fois un Live CD Ubuntu aidera à résoudre les problèmes de Windows ^^
Ivo Flipse
1
J'ai remarqué que moi - même, le réseau dodgy essayer un live CD, numéro de système de fichiers essayer un live CD, table de partition corrompue etc. , etc. :-)
Col
C'est la seule solution qui a fonctionné pour moi. Je t'aime, Linux! <3
David Frye
1
Exécuter bash à partir de Windows Pas de Linux requis. ;-) De même, si vous utilisez Windows 10, installez simplement “Windows Subsystem for Linux”. Windows utilise essentiellement les hooks d’application Ubuntu pour effectuer le travail. triez, xargs, md5sum, gpg, curl, wget, apache, mysql, python, perl, ruby, php, gcc, tar, vim, emacs, diff, patch et la plupart des dizaines de milliers de paquets binaires des archives d'Ubuntu! "Il s'agit d'un environnement de développement Linux très complet qui s'exécute sous Windows. Zdnet.com/article/ubuntu-and-bash-arrive-on-windows-10
Dawesi
cygwin est une autre alternative pour exécuter les commandes LINUX dans Windows
atom88
5

Renommez le répertoire de copier / coller le fichier ailleurs, puis supprimez-le. Fonctionne ici.

Ou simplement à partir de l'invite de commande, si vous ne voulez pas traverser les ennuis.

Tour
la source
Cela fonctionne comme un charme. Creusez là-bas (pour moi, c'était des node_modulesdossiers super-imbriqués ), faites-le glisser vers votre bureau et supprimez-le. Rincez et répétez à mesure que vous montez quelques dossiers à la fois. Quel problème désagréable.
Nickb
7
Cela n'a pas fonctionné pour moi - l'opération de collage a échoué à cause du long nom de fichier - peu importe où le couper.
UpTheCreek
1

Probablement pas le meilleur moyen et je suis intéressé de voir ce que les autres proposent -

J'ai eu cette fois et j'ai essayé quelques choses sans aucune chance. Plutôt que de chercher un bon outil, j'ai redémarré avec le disque Windows dans, je suis allé à la console de récupération et je l'ai simplement supprimé de là. Travaillé première fois et vraiment bien!

En outre, vient de faire un Google pour vous et a trouvé ceci - DelinvFile est beau mais ne peut pas en donner la garantie .

Edit - Attention, je viens de voir ce qui précède n’est qu’un essai - Peut-être pas aussi bon que je le pensais!

William Hilsum
la source
Le rimraf gratuit fonctionne très bien et a fonctionné lorsque toutes les autres idées ont échoué. Il nécessite node.js
Julian Knight