web-dev-qa-db-fra.com

Comment supprimer un long chemin dans Windows.

Lors de l'importation d'un projet dans Eclipse, celui-ci a commencé à créer des versions récursives du répertoire. 

Désormais, lorsque j'essaie de supprimer quoi que ce soit, le message "le nom de fichier que vous spécifiez est trop long" s'affiche.

Je ne peux pas le supprimer de la commande Shell. Je ne peux pas le supprimer de l'explorateur. Je ne peux rien faire avec ça. Je n'ai aucune idée du nombre de copies créées par Eclipse. Eclipse a fonctionné pendant une minute avant que je réalise que quelque chose n'allait pas et que j'annule l'opération. 

Je peux obtenir les propriétés du dossier de niveau supérieur, qui indique qu'il contient 497 dossiers. 

Question 1: comment puis-je supprimer tout cela dans Windows? 

Question 2: A quoi diable pensait Eclipse? 

58
Baltimark

J'ai eu un problème similaire à celui rencontré avec Eclipse: lors de l'importation d'un projet à l'aide de Subclipse, un ensemble de répertoires profondément imbriqués a été généré que je ne pouvais pas supprimer.

J'ai fait plusieurs choses, tout d’abord, j’ai édité les noms de répertoires dans le sens le plus court possible (en fait, je pense que c’était inutile). Deuxièmement, j'ai parcouru l'arborescence de répertoires aussi profondément que possible, puis j'ai coupé et collé la branche (ce qui permet de supprimer la branche d'origine), puis j'ai répété le processus. 

Les solutions de @Charlie et @ Tomalek semblent plus élégantes. Je n'ai pas l'intention de répéter l'expérience pour le savoir.

19
Ian Hopkinson
robocopy empty_dir base_nested_dir /purge

Exemple: Si vous avez un chemin de dossier trop long tel que:

D:\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles

suivez ces instructions pour le supprimer.

  1. Créez un dossier vide, tel que C:\Users\Name\Desktop\temp.
  2. Ouvrez une fenêtre d'invite de commande.
  3. Tapez robocopy C:\Users\Name\Desktop\temp D:\BackupFolder /purge

Remarque: S'il existe des espaces dans l'un des chemins à l'étape 3, il doit être entouré de guillemets. 

158
gonsalu

7Zip est la solution ultime si vous n'êtes pas à l'aise avec la ligne de commande.

  1. Ouvrez le gestionnaire de fichiers 7Zip
  2. Accédez à votre fichier
  3. Maj-Supprimer votre fichier

À votre santé!

85
Swanidhi

Quant à Q1) 

Utilisez subst pour court-circuiter les chemins:

subst Q: C:\very\long\path\created\by\Eclipse
Q:
del *.*

Quant à Q2)

Les longs chemins posent moins de problèmes dans les autres systèmes d’exploitation, et comme il existe des fonctions d’API Windows qui peuvent traiter des chemins de plus de 255 caractères, ils l’ont fait, je suppose.

12
Tomalak

Si vous devez gérer des chemins plus longs que MAX_PATH, vous devez utiliser les versions Unicode des API de fichiers Windows (par exemple, DeleteFileW ) et utiliser le préfixe \\? \. Vous pouvez écrire un programme court en utilisant ces API pour énumérer ces répertoires et les supprimer.

10
Charlie

Le correctif est simple et gratuit! Pas besoin de renommer les dossiers du tout.

  1. Téléchargez Cygwin gratuitement.

  2. utilisez la commande rm -f -r <folder-name> et attendez quelques instants.

J'ai eu un dossier de taille 1,5 Go avec de nombreux dossiers intérieurs et cela a fonctionné!

6
Haitham Sweilem

Les trois réponses précédentes sont évidemment du spam (pour une démo payware). Si vous voulez une solution gratuite en un clic, voir ici:

http://www.osmstudios.com/Display.asp?Page=pathtoolong

Qui utilise probablement le Java à 3 lignes à partir de ce fil.

-fm

4
F.M.

Une méthode mentionnée dans ce message sur le forum Windows Sysinternals de maxaha1 a fonctionné.

Je vous suggère de travailler de haut en bas. Tant que vous restez dans le même volume (partage), vous pouvez généralement faire glisser les répertoires de niveau supérieur vers nouveaux parents, sans égard au contenu du répertoire étant traîné (c.-à-d. et les problèmes de longueur/récursivité qu’il pourrait avoir). Alors vous prenez un répertoire peut-être 4 ou 5 niveaux de votre chemin de problème, et faites-le glisser à la racine. Ensuite, supprimez le chemin d'origine qui maintenant seulement contient quelques niveaux. Idéalement, travaillez pour garder le plus long chemin vers moins plus de 250 caractères (noms de fichiers inclus). Je suis en train de faire une migration système à le moment, et nous avons des utilisateurs avec plus de 340 chemins de caractères qui ne copier sans cette méthode. J'ai essayé des utilisations de réseau, des utilisations récursives, scripts récursifs, etc. Malheureusement, les utilisateurs semblent être capables de créer des choses qui troublent les meilleurs codeurs, administrateurs, etc.

Créez de nouveaux dossiers et faites simplement glisser-déposer, plusieurs dossiers à partir du haut à chaque fois (et supprimez-les) jusqu'à ce que tout soit nettoyé.

4
Izzy Weird

j'avais rencontré le même problème avec Eclipse ..! un zillion de dossiers imbriqués ont été créés et ont pris plus de 500 Mo d'espace !!!

j'ai essayé une tonne de choses dans les fenêtres et rien n'a fonctionné .. 

enfin, je viens de redémarrer en utilisant Ubuntu et de supprimer ce dossier horrible .. juste comme ça .. Ubuntu ne semble pas avoir de telles restrictions d'accès basées sur la longueur du chemin de fichier que Windows ne le fait ... rend la vie beaucoup plus facile .. :)

4
rachel

Quelqu'un ci-dessus a déjà posté une référence à "rimraf", mais permettez-moi d'ajouter des détails. Si Node est installé sur votre système, utilisez simplement le module rimraf (il peut être installé sur votre chemin). C’est de loin le moyen le plus simple de supprimer des éléments d’un système Windows dans les cas les plus simples. Ce n'est pas tellement que rimraf est génial, en fait, c'est parce que Node.js gère les systèmes de fichiers au niveau du noyau du périphérique. Si vous examinez le code source du module 'fs' pour Node, vous verrez un code tel que this . En substance, Node.js gère les systèmes de fichiers bien mieux que même Git pour Windows, c’est-à-dire qu’un bogue utilisant git clean -fdx sous Windows ne supprime pas les dossiers avec des noms de chemin longs. 

3
lateralpunk

Par programme, vous pouvez supprimer en utilisant DeleteFileW et RemoveDirectoryW, et en ajoutant L"\\?\" aux noms de fichiers. Notez que vous devez utiliser la version W et non la version A des API.

3
John

L'option MIR (refléter une arborescence de répertoires complète) a également fonctionné pour les fenêtres et les chemins réseau de fenêtres.

robocopy empty_dir <foldertobedeleted> /MIR

  • Créez simplement un répertoire vide et dites à robocopy de tout purger dans le répertoire cible qui ne se trouve pas dans le répertoire vide 

la sortie serait comme ça ..

 enter image description here >

1
Ram Ghadiyaram

Je n'étais vraiment pas satisfait des solutions publiées ici et ailleurs (robocopy, 7Zip, subst, spyware louche) et j'ai donc lancé mon propre petit outil de ligne de commande. 

Il peut supprimer un fichier ou un répertoire entier de manière récursive. Peut-être que dans le futur j'ajouterai plus d'options. 

L'outil s'appelle SuperDelete et vous pouvez l'obtenir à partir de la page releases page GitHub

1
Marcel N.

Lol j'ai eu un problème similaire il y a quelques années. A cause d'un bug, j'ai créé une imbrication indéfinie de dossiers jusqu'à ce que le nom du fichier devienne trop long. 

IIRC, je les ai supprimés par programme en parcourant la structure des dossiers.

1
Zesty

D'accord j'ai essayé de chercher une solution pour cela et j'ai trouvé l'une des solutions les plus faciles pour les utilisateurs de Windows

  1. Installer Mobaxterm
  2. Ouvrez mobaxterm. Allez dans le répertoire que vous souhaitez supprimer (en utilisant cd) et lancez la commande suivante

    rm -rf annuaire

Tous les dossiers, sous-dossiers que Windows se plaignait de supprimer seront maintenant supprimés

1
Pratik Shelar

C'est assez gênant qu'en 2016, cela pose toujours aux utilisateurs de Windows un problème lorsque Linux a résolu ce problème il y a quelques années. C'est encore plus énervant quand c'est facile à faire en Java.

Nous devrions utiliser Change.org pour demander aux États membres d'inclure cette possibilité. Cela ne peut pas être difficile. S'ils s'inquiètent de la compatibilité avec les versions antérieures, pourquoi ne pas simplement utiliser un mode strict que les administrateurs peuvent activer ou désactiver. Donnez-nous au moins l'avertissement mais permettez-nous de le supprimer quand même. GRRRRR [/ rant]

Si vous utilisez Java sur votre machine, ce code pourrait vous être utile:

import Java.io.File;

public class Delong {

    public static void main(String[] args) {
        File file = new File("F:\\YourDirectory\\YourFile");
        boolean result = deleteDirectory(file);

        if(result)
            System.out.println("Deleted");
        else
            System.out.println("Failed");
    }//end main

    /**
     * Force deletion of directory
     * @param path The path you want to delete
     * @return True if it worked;
     */
    static public boolean deleteDirectory(File path) {
        if (path.exists()) {
            File[] files = path.listFiles();
            for (int x = 0; x < files.length; x++) {
                if (files[x].isDirectory()) 
                    deleteDirectory(files[x]);
                 else 
                    files[x].delete();
            }//end for
        }///end if
        return (path.delete());
    }//endDeleteDirectory

}//end class
0
Andrew S