2009-12-03 19:23:09 +0000 2009-12-03 19:23:09 +0000
387
387

Comment supprimer des répertoires dont le chemin/nom est trop long 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 la création de ces fichiers.

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

Ce sont les mêmes erreurs cette question , mais les réponses ne me conviennent pas vraiment car j'ai affaire à un répertoire, pas à un fichier, et je ne sais pas toujours quels fichiers ou sous-répertoires spécifiques causent le problème. Et j'essaie d'éviter tout processus manuel (autre que le déclenchement d'une seule commande) pour les supprimer réellement.

Si j'essaie de supprimer le répertoire depuis l'explorateur, 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 powerhell 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 des outils ou des moyens faciles de contourner cette erreur de suppression sans avoir à trouver manuellement les fichiers qui posent problème et à les déplacer/renommer ?

Réponses (23)

432
432
432
2009-12-03 19:48:56 +0000

Utilisez le gestionnaire de fichiers 7-Zip pour les supprimer.

Si vous rencontrez toujours des difficultés, assurez-vous d'utiliser Maj+Supprimer dans le gestionnaire de fichiers 7-Zip. Sinon, Windows essaie de les déplacer vers la Corbeille (qui échouera à nouveau).

311
311
311
2014-07-04 06:23:55 +0000

Aucune des autres réponses (gratuites) ici n'a fonctionné pour moi, mais j'en ai trouvé une sur un autre site :

rimraf <dir>

rimraf est un paquet Node.js , vous devrez donc installer Node.js qui comprend npm . Ensuite, vous pouvez exécuter :

npm install -g rimraf

Ensuite, vous pouvez exécuter rimraf à partir de la ligne de commande.

J'ai trouvé cette solution parce que npm lui-même causait ce problème en raison de la façon dont il imbrique les dépendances.

Au fait, rimraf tire son nom de la commande UNIX rm -rf, qui supprime récursivement les fichiers et les dossiers.

155
155
155
2016-03-03 16:45:54 +0000

Il n'est pas nécessaire d'installer de programme pour résoudre ce problème.

Ce problème est facilement résolu en utilisant robocopy, préinstallé depuis Windows Vista, lancé en 2006.

Par exemple, il a été signalé que rmdir /S /Q <dir> échoue dans certains cas. Il n'est pas nécessaire d'utiliser 7zip ou tout autre outil tiers. Powershell est une surcharge. Cygwin peut fonctionner, mais vous pouvez ne pas l'avoir installé. Donc, concentrons-nous sur robocopy

L'idée est de

  1. utiliser robocopy pour copier+mettre à jour
  2. depuis un nouveau dossier vide
  3. vers le dossier que vous voulez supprimer, la cible.

Après avoir exécuté robocopy, le répertoire cible serait vide également.

Ces instructions sont pour la ligne de commande. Ouvrez simplement la recherche dans Windows, tapez cmd et appuyez sur Entrée.

Disons que la cible de la suppression est :

C:\delete\this folder\with a very long name

Nous procédons comme suit :

  1. Créez d'abord un répertoire vide, par exemple C:\emptyfolder.

  2. Copiez+mettez à jour le répertoire vide vers la cible, en utilisant l'option /purge

  3. Supprimez le répertoire vide. Vous n'en avez plus besoin.

Comme il n'y a pas de fichiers ou de dossiers dans le répertoire source (C:\emptyfolder), il efface simplement les fichiers et les dossiers sous le répertoire cible (C:\delete\this folder\with a very long name) de manière récursive !

  • Dernière astuce : vous pouvez éviter d'écrire à la main

Attention : Les fichiers supprimés ne vont pas à la poubelle ! Une fois effacés, les fichiers ne peuvent pas être récupérés.

(extrait de “Path too long ? Use Robocopy” by BVLANGEN )

PS : je me rends compte que cette réponse était là, moins didactique. Comment supprimer un fichier dans Windows avec un nom de fichier trop long ? [duplicate] Benoit a ajouté :

Vous devrez peut-être passer par ce processus plus d'une fois pour vous débarrasser de tous les fichiers.

86
86
86
2009-12-03 19:24:08 +0000

Je crois avoir trouvé un moyen de supprimer des choses de cmd. Au départ, j'ai essayé la commande del, mais ça n'a pas marché. Puis je me suis souvenu de rmdir. Faire ce qui suit :

rmdir /S /Q <dir>

semble avoir fonctionné.

30
30
30
2014-11-25 20:22:32 +0000

L'outil que j'ai utilisé lorsque j'ai eu ce problème était FastCopy . J'ai sélectionné Delete All dans la liste déroulante, j'ai choisi le répertoire que je voulais supprimer et j'ai cliqué sur Delete All.

FastCopy est portable (aucune installation requise) et il existe des versions 32 bits et 64 bits.

26
26
26
2014-09-26 19:40:05 +0000

Cygwin’s rm -rf fonctionne bien sur les longs chemins !

26
26
26
2014-10-28 06:09:34 +0000

Sans installer de logiciel supplémentaire, vous pouvez utiliser la commande subst pour créer temporairement un alias vers un répertoire nommé long.

par exemple Si vous voulez supprimer le dossier C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted, vous pouvez utiliser la commande

subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"

et ensuite vous pouvez supprimer facilement X:\folder to be deleted dans l'explorateur Windows ou à l'invite de commande. Pour supprimer l'alias temporaire de la lettre de lecteur, utilisez la commande

subst x: /d
22
22
22
2011-04-22 16:00:01 +0000

Il suffit de passer de Powershell au commandement en courant en dessous :

Cmd /C "rmdir /S /Q <dir>"
18
18
18
2015-06-25 14:19:53 +0000

La solution de Dentrasi ](https://superuser.com/a/78458/10407) est celle qui a le mieux fonctionné pour moi, mais je voulais afficher les étapes spécifiques dans une réponse de haut niveau.

  1. Télécharger et installer la dernière version stable de 7zip .
  2. Lancer le gestionnaire de fichiers 7zip ( 7zfm.exe ).
  3. Dans le gestionnaire de fichiers 7zip, naviguez de manière à voir le nom du dossier que vous souhaitez supprimer (c'est-à-dire que vous êtes dans le dossier parent).
  4. Maintenez la touche Shift enfoncée.
  5. Cliquez sur le bouton “Supprimer”, soit sur votre clavier soit dans la barre d'outils du gestionnaire de fichiers 7zip ; vérifiez que vous maintenez toujours la touche Shift enfoncée.
  6. Cliquez sur le bouton “OK” ; vérifiez que vous maintenez toujours la touche Shift enfoncée.
12
12
12
2016-09-09 10:52:17 +0000

Il y a deux choses qui ne sont pas déjà mentionnées dans les réponses existantes.

  1. Vous pouvez utiliser le préfixe “extended length path” pour accéder aux longs chemins
  2. Avec Windows 10, vous pouvez activer le support des chemins longs pour un usage général - notez cependant que toutes les applications ne fonctionneront pas avec les chemins longs, vous devriez tester les logiciels plus anciens. Seuls les logiciels avec une entrée de manifeste appropriée pourront l'utiliser.

Préfixe de chemin long

L'API Windows a une fonction spéciale qui prend en charge les noms de chemin Unicode jusqu'à 32k caractères (chaque élément ayant une longueur maximale de 255 caractères). Le préfixe utilisé pour indiquer à l'API d'utiliser de longs chemins Unicode est `\?Il y a deux choses qui ne sont pas déjà mentionnées dans les réponses existantes.

  1. Vous pouvez utiliser le préfixe “extended length path” pour accéder aux longs chemins
  2. Avec Windows 10, vous pouvez activer le support des chemins longs pour un usage général - notez cependant que toutes les applications ne fonctionneront pas avec les chemins longs, vous devriez tester les logiciels plus anciens. Seuls les logiciels avec une entrée de manifeste appropriée pourront l'utiliser.

Préfixe de chemin long

L'API Windows a une fonction spéciale qui prend en charge les noms de chemin Unicode jusqu'à 32k caractères (chaque élément ayant une longueur maximale de 255 caractères). Le préfixe utilisé pour indiquer à l'API d'utiliser de longs chemins Unicode est , comme dans :

\?\D:\very long path

Les noms UNC sont normalement utilisés pour les chemins d'accès aux serveurs distants sous la forme \servername\path name\file name. Vous pouvez combiner cela avec le préfixe de long chemin d'accès de la manière suivante : \?\UNC\server\share

Notez que certaines applications, mal écrites mais malheureusement assez courantes, ne supportent pas les chemins d'accès UNC ni le préfixe de long chemin d'accès.

Référence : https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath

Long path support

C'est une option qui a été ajoutée aux versions récentes de Windows 10. Elle n'est pas activée par défaut au moment de la rédaction du présent document, car elle nécessite un support d'application spécifique. Il est intéressant de noter que PowerShell dispose d'un support intégré, de sorte que l'activation de cette option permettra d'utiliser les chemins longs directement dans les scripts PowerShell.

Vous pouvez l'activer via l'éditeur de politique de groupe si vous avez une version de Windows avec cela. Ou vous pouvez simplement utiliser le changement de registre suivant. Comme toujours, veuillez sauvegarder la section du registre que vous modifiez avant de faire quoi que ce soit.

  1. Exécuter regedit.exe.
  2. Confirmez l'invite de l'UAC.
  3. Naviguez jusqu'à la clé : HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
  4. Créez ou modifiez la clé LongPathsEnabled.
  5. Si elle n'existe pas, cliquez avec le bouton droit de la souris sur Politiques et sélectionnez Nouvelle valeur de mot (32 bits) dans le menu.
  6. Réglez LongPathsEnabled sur 1 pour l'activer.

Toute application ayant des entrées de manifeste appropriées aura désormais accès aux longs chemins d'accès standard POSIX. Cela devrait inclure les applications Windows Store.

Reference : https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/

UPDATE 2017-04-09

@maoizm a signalé un problème avec la clé de registre ci-dessus donc j'ai fait quelques recherches supplémentaires . Il semble que vous puissiez maintenant définir le support des noms de fichiers longs avec une clé système :

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)

Cela ne fonctionne cependant que pour les applications qui sont spécifiquement configurées pour l'utiliser (nécessite une entrée dans le manifeste.xml de l'application).

Vous devez également noter que vous ne pouvez pas utiliser de noms de chemin relatifs avec cette méthode.

8
8
8
2014-10-28 05:52:15 +0000

J'aime la solution du cmd. Bien que je souhaite partager une autre solution qui fonctionne même dans le seul Explorer : essayez de raccourcir les noms des dossiers parents avant la suppression : des noms plus courts raccourciront le chemin d'accès. Disons que vous avez cette arborescence du dossier :

C:\

.. Projets

.. .. Quelques projets géniaux au printemps 2014

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

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

.. .. .. .. .. .. Les 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 des dossiers, vous pouvez renommer temporairement les dossiers parents et raccourcir le chemin d'accès, puis supprimer le dossier. Les noms peuvent être simplement 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é des noms des dossiers.

7
7
7
2016-01-11 14:22:54 +0000

La solution 7-zip fonctionne très bien. Une autre option, si vous avez installé git, consiste à ouvrir un shell bash et à utiliser :

rm -f

(ou rm -rf pour les dossiers)

4
4
4
2014-04-29 15:47:23 +0000

Je suggère Total Commander (shareware, mais continue à fonctionner après la période d'essai avec seulement un écran de démarrage minimal). C'est ainsi que je résous toujours les problèmes de noms de fichiers trop longs.

2
2
2
2015-02-08 21:07:55 +0000

J'ai créé un programme java simple qui utilise robocopy pour supprimer les fichiers. Le jar est un programme exécutable. Pour des résultats supplémentaires, exécutez-le à partir de la ligne cmd. https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing

2
2
2
2010-11-06 16:24:27 +0000

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

1
1
1
2013-12-20 06:10:00 +0000

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

Je suis tombé sur delinfile et j'ai travaillé assez bien et assez rapidement !

Son essai est limité à 3 actions / 15 jours mais il est utilisable si vous voulez seulement supprimer quelques dossiers/fichiers :

1
1
1
2017-10-28 00:35:26 +0000

Vous avez ici la réponse parfaite (pour les dossiers). Fonctionne sous Windows 10.

REM Make sure there is no \ at the end of either path!
robocopy "C:\...\...\...\long\path" "C:\DeleteMe" "FileName" /MOV
REM Note: this ^ can be called many times before...:

REM Finally, recursively delete the higher up DeleteMe directory.
rmdir /S /Q DeleteMe

Voir aussi : https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath

Pas une seule réponse alternative en 4 questions n'était suffisante pour mes besoins. Vous êtes le bienvenu dans le monde.

1
1
1
2017-01-09 12:08:22 +0000

Bigger Directories est conçu pour cette tâche également.

  • Download
  • Utilise un appel récursif avec RemoveDirectoryW pour supprimer des répertoires existants
  • Utilise son propre dépôt de fichiers pour les répertoires nouvellement créés
  • Les fichiers peuvent être déplacés des répertoires avant la suppression des répertoires contagieux.
  • Rapide, bien que la navigation vers le haut du répertoire soit un clic par répertoire imbriqué
  • Windows XP(SP3) et supérieur
  • Code non signé et non géré sans installateur, donc possibilité d'avertissement Smartscreen lorsqu'il est exécuté à partir d'un dossier de secours, par exemple le bureau.

Plus d'informations sur CodeProject .

1
1
1
2017-06-13 07:52:13 +0000

J'ai fait face à ce problème dans Windows 10 et j'ai trouvé cette solution facile.

  1. Allez un peu plus loin dans votre arborescence de dossiers.
  2. Faites glisser un dossier depuis le milieu de l'arborescence jusqu'au début de l'arborescence en utilisant la barre d'adresse.
  3. Comme dans mon image, glissez et déposez une boîte rouge sur une boîte verte. (dans ce cas, le chemin est plus court, mais pour les longs chemins, cela fonctionne également)
  4. Ensuite, votre chemin devient plus court et supprimez comme d'habitude en utilisant la touche delete.

0
0
0
2015-06-25 16:47:36 +0000

J'ai finalement découvert comment faire par l'intermédiaire de Powershell. Voici les instructions que j'ai suivies pour le faire fonctionner sous Windows 7 :

  1. Créez un nouveau dossier appelé NTFSSecurity dans le dossier C:\Users\XXXX\Documents\WindowsPowerShell\Modules\NTFSSecurity, où XXXX est votre nom d'utilisateur Windows. Exemple : si mon nom d'utilisateur était “aspnyc”, le nouveau dossier serait C:\Users\aspnyc\Documents\WindowsPowerShell\Modules\NTFSSecurity .

  2. Téléchargez le paquet File System Security PowerShell Module package - il devrait être disponible sous la forme d'un simple fichier ZIP.

  3. Ouvrez une console Powershell, lancez Get-Module -ListAvailable et assurez-vous que NTFSSecurity apparaît quelque part dans la liste des modules enregistrés.

  4. Dans la console Powershell, lancez Import-Module NTFSSecurity. Dans la console Powershell, lancez Remove-Item2 “YYYY” -Recurse , où YYYYY est le chemin d'accès Windows au dossier que vous voulez supprimer récursivement (par exemple C:\Potatoes\Badgers\FolderToDelete ).

0
0
0
2015-10-09 16:08:22 +0000

J'ai finalement trouvé comment faire avec Powershell sur Windows 10 où les noms de fichiers individuels étaient trop longs. Voici les étapes que j'ai suivies pour que cela fonctionne sous Windows 10 :

  1. Téléchargez le paquet du module PowerShell Sécurité du système de fichiers - il devrait être disponible sous la forme d'un simple fichier ZIP.
  2. Extrayez le fichier ZIP comme un dossier NTFSSecurity dans le répertoire C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules.
  3. Ouvrez une console Powershell avec l'élévation administrative (alias Admin Mode) et lancez Get-Module -ListAvailable et assurez-vous que NTFSSecurity apparaît quelque part dans la liste des modules enregistrés.
  4. Exécutez Set-ExecutionPolicy Unrestricted pour contourner le mode d'exécution signé. Vous devez confirmer cette action avec un Y(es)
  5. Eventuellement cd au dossier que vous voulez supprimer.
  6. Dans la console Powershell, lancez Import-Module NTFSSecurity.
  7. Dans la console Powershell, lancez Remove-Item2 “YYYY” -Recurse , où YYYY est le chemin d'accès Windows relatif ou absolu au dossier que vous voulez supprimer récursivement (par exemple C:\Potatoes\Badgers\FolderToDelete ).
  8. Vérifiez si cela a fonctionné.
  9. Eventuellement revenir au mode d'exécution signé avec Set-ExecutionPolicy Restricted. Vous devez confirmer cette action avec Y(es).
0
0
0
2019-07-16 21:25:40 +0000

Naviguez jusqu'au répertoire dans WinRAR, sélectionnez le fichier, appuyez sur F2, renommez le fichier en lui donnant un nom plus court. Ensuite, vous pouvez supprimer le fichier comme d'habitude.

Source : https://www.youtube.com/watch?v=qQTyTprFAOg

0
0
0
2017-07-05 10:44:55 +0000

Si vous avez installé Bash on Ubuntu on Windows, vous pouvez faire un CD du répertoire parent dans une invite de commande normale et ensuite taper :

bash -c "rm -rf dirname_here"

qui lance bash, supprime récursivement le répertoire de linux où il n'y a pas de restrictions sur les noms de fichiers, puis retourne à votre invite de commande normale.