web-dev-qa-db-fra.com

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

Ma femme a 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?

200
user3048

Lorsque vous souhaitez supprimer complètement un répertoire contenant des chemins d'accès longs, robocopy fait un 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 en interne utilise les versions Unicode compatibles 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.

421
Benoit

A 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
90
Will Eddins

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 à partir du dernier dossier enfant et monter ou descendre.

53
joeqwerty

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

\\.\C:\un répertoire\autre répertoire\un fichier avec un nom long
13
grawity

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 dans 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 la première partie du chemin ne contienne que quelques caractères. Pré-requis - le dossier doit être dans un dossier partagé (ce qui peut déjà être 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 dans un dossier cible near au fichier et cela fonctionne bien.

J'ai dû utiliser cette technique en effectuant un grand nombre de copies 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 ils dépassaient la longueur totale du chemin du fichier. lors de l'accès à partir de la racine du disque local.

13
AdamV

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

Vous pouvez également 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).

9
Col

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.

5
Rook

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à. A travaillé la première fois et vraiment bien!

En outre, nous venons de faire un Google pour vous et nous avons trouvé ceci - DelinvFile Looks Good mais je ne peux pas en témoigner.

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!

1
William Hilsum