Windows semble avoir une limite de longueur sur les noms de fichier lors de la tentative de suppression, mais cela n'empêchera pas ces fichiers d'être créés.
Notre processus de génération crée un certain nombre de fichiers temporaires (beaucoup de build off d'un WSDL) qui sont en conflit avec cette limite. Notre script ant est en quelque sorte capable de les supprimer lors d'un nettoyage, mais parfois j'ai besoin de supprimer le répertoire de la zone de travail (où sont tous les fichiers temporaires) sans vraiment faire un nettoyage complet de la fourmi.
C'est la même erreur que cette question , mais les réponses là ne fonctionnent pas vraiment pour moi car je traite 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 déclencher une seule commande) pour les supprimer.
Si j'essaie de supprimer le répertoire de l'Explorateur, j'obtiens l'erreur
Cannot delete [file name]: The file name you specified is not valid or too long. Specify a different file name
Essayer Remove-Item
dans powershell 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>
Est-ce que quelqu'un connaît des outils ou des moyens faciles de contourner cette erreur de suppression sans devoir trouver manuellement les fichiers problématiques et les déplacer / les renommer?
Téléchargez 7zip , son gestionnaire de fichiers peut les supprimer. Inestimable si vous utilisez quelque chose comme Cobian Backup, ce qui a une mauvaise habitude de créer de longs chemins …
Des commentaires:
Si vous avez toujours des problèmes, assurez-vous d'utiliser shift + del. C'est parce que Windows essaie de déplacer ces fichiers vers la Corbeille.
Aucune des autres réponses (gratuites) ici n'a fonctionné pour moi, mais j'ai trouvé un sur un autre site:
rimraf <dir>
Rimraf est un paquet Node.js , donc vous devrez installer Node.js qui inclut 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 elle-même causait ce problème en raison de la façon dont elle niche les dépendances.
Au fait, rimraf
obtient son nom de la commande UNIX rm -rf
, qui supprime récursivement les fichiers et les dossiers.
Il n'est pas nécessaire d'installer un programme pour résoudre ce problème.
Ce problème est facilement résolu à l'aide de robocopy
, préinstallé depuis Windows Vista, lancé en 2006.
Par exemple, rmdir /S /Q <dir>
a été signalé comme ayant échoué dans certains cas. Il n'est pas nécessaire d'utiliser 7zip ou tout autre outil tiers. Powershell est une overkill. Cygwin peut fonctionner, mais vous ne pouvez pas l'installer. Alors, concentrons-nous sur le robocopy
L'idée est de
robocopy
pour copier + mis à jour Après avoir exporté un robocopy
, le répertoire cible serait également vide.
Ces instructions sont pour la ligne de commande. Ouvrez simplement la recherche dans Windows, tapez cmd
et appuyez sur Entrée.
Disons que le dossier que nous voulons supprimer, la cible, est
C:\delete\this folder\with a very long name
C:\emptyfolder
.Mkdir C: \ folder vide
Robocopy c: \ emptyfolder "C: \ delete \ ce dossier \ avec un nom très long" / purge
Rmdir c: \ emptyfolder
Comme il n'y a pas de fichiers ou de dossiers dans le répertoire source ( C:\emptyfolder
), il supprime simplement les fichiers et les dossiers sous le répertoire cible ( C:\delete\this folder\with a very long name
).
Astuce finale: vous pouvez éviter d'écrire à la main
C: \ delete \ this folder \ avec un nom très long
En faisant glisser le dossier à partir d'une fenêtre de l'Explorateur et en déposant dans la fenêtre Terminal / cmd.
Attention : les fichiers supprimés ne vont pas au dossier de la corbeille . Une fois supprimés, les fichiers ne peuvent pas être récupérés.
(Tiré de "Chemin trop long? Utiliser Robocopy" par BVLANGEN )
Je crois que j'ai trouvé un moyen de supprimer des choses de cmd
. À l'origine, j'ai essayé la commande del
, mais cela ne fonctionnait pas. Ensuite, je me suis souvenu de rmdir
. Faire ce qui suit:
rmdir /S /Q <dir>
Semble avoir fonctionné.
L'outil que j'ai utilisé lorsque j'ai eu ce problème était FastCopy . J'ai sélectionné Supprimer tout dans la liste déroulante, j'ai sélectionné le répertoire que je voulais supprimer et j'ai cliqué sur Supprimer tout .
FastCopy est portable (pas d'installation requise), et il existe des versions 32 bits et 64 bits disponibles.
Le rm -rf
Cygwin fonctionne bien sur de longs chemins!
Il suffit de passer de Powershell en commande en exécutant ci-dessous:
Cmd /C "rmdir /S /Q <dir>"
La solution de Dentrasi est ce qui a bien fonctionné pour moi, mais j'ai voulu afficher les étapes précises dans une réponse de haut niveau.
Sans installer de logiciel supplémentaire, vous pouvez utiliser la commande subst
pour créer temporairement un alias dans un répertoire nommé depuis longtemps.
Par exemple, si vous souhaitez 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 puis vous pouvez supprimer X:\folder to be deleted
dans l'Explorateur Windows ou dans l'invite de commande facilement. Pour supprimer l'alias de la lettre de lecteur temporaire, utilisez la commande
subst x: /d
J'aime la solution cmd. Bien que je souhaite partager une autre solution de contournement qui fonctionne même dans l'Explorateur: essayez de raccourcir les noms des dossiers parent avant la suppression: les noms plus courts raccourciront le chemin. Dites, vous avez cette structure arborescente du dossier:
C: \
.. Projets
.. .. Quelque génial projet 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
… .. .. .. .. Fichiers réels avec de longs noms, aussi
Dans ce cas, vous ne pouvez pas supprimer les dossiers, vous ne pouvez pas supprimer ou renommer les fichiers. Si vous souhaitez supprimer la structure de dossier entière ou une partie de celle-ci, vous pouvez renommer temporairement les dossiers parents et raccourcir le chemin, puis supprimer le dossier. Les noms ne peuvent être que des lettres:
C: \
.. Projets
.. .. X
… .. ..
.. .. .. .. z
… .. .. .. .. Fichiers réels avec de longs noms, aussi
Dans mon cas, je voulais simplement supprimer le dossier entier avec de nombreux sous-dossiers et fichiers. Donc, je me souciais des noms des dossiers.
Il y a deux choses qui n'ont pas déjà été mentionnées dans les réponses existantes.
L'API Windows possède une fonction spéciale qui prend en charge les noms de chemin Unicode jusqu'à 32k caractères (chaque élément mesure jusqu'à 255 caractères).
Ceci est souvent appelé à tort sous le nom UNC, mais ce n'est pas grave.
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 lors de la référence aux chemins sur les serveurs distants sous la forme \\servername\path name\file name
. Vous pouvez combiner ceci avec le préfixe long chemin, donc: \\?\UNC\server\share
Notez que certaines applications mal écrites, mais malheureusement assez courantes, ne prennent pas en charge les chemins de fichiers UNC ni le préfixe de chemin long.
Référence: https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
Il s'agit d'une option qui a été ajoutée aux versions récentes de Windows 10. Ce n'est pas, au moment de la rédaction, activé par défaut puisqu'il nécessite un support d'application spécifique. Fait intéressant, PowerShell a un support intégré afin d'activer cette option permettra d'utiliser de longs chemins directement dans les scripts PowerShell.
Vous pouvez l'activer via l'éditeur de stratégie 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.
regedit.exe
. HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
LongPathsEnabled
. LongPathsEnabled
sur 1
pour activer. Toutes les applications avec les entrées de manifeste appropriées auront désormais accès aux chemins longs standard POSIX. Cela devrait inclure les applications Windows Store.
Référence: https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/
MISE À JOUR 2017-04-09
@maoizm a souligné un problème avec la clé de registre ci-dessus, donc j'ai fait un peu plus de creusement . Il semble que vous pouvez maintenant définir un support de nom de fichier long avec une clé système:
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)
Cela fonctionne toujours uniquement pour les applications qui sont spécifiquement configurées pour l'utiliser (nécessite une entrée dans manifeste.xml de l'application).
Vous devez également noter que vous ne pouvez utiliser les noms de chemins relatifs avec cette méthode.
Je suggère Total Commander (shareware, mais continue de fonctionner après la période d'essai avec seulement un écran de démarrage minimal nag). C'est la manière dont je résolus toujours les problèmes trop longs .
La solution à 7 zip fonctionne très bien. Une autre option si vous avez installé git est d'ouvrir un shell bash et d'utiliser:
rm -f
(Ou rm -rf
pour les dossiers)
Vous pouvez également les supprimer en utilisant leur nom court équivalent. dir /x
vous montrera.
J'ai créé un programme java simple qui utilise robocopy pour supprimer les fichiers. Le pot est exécutable. Pour une sortie supplémentaire, exécutez-le à partir de la ligne cmd.
https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing
J'ai essayé toutes les autres réponses, mais elles n'ont pas fonctionné (au moins pour moi).
J'ai découvert Delinfile et j'ai travaillé très bien et assez rapidement!
Son essai est limité à 3 actions / 15 jours, mais il est utilisable si vous souhaitez seulement supprimer quelques dossiers / fichiers:
Les plus grands répertoires sont également conçus pour cette tâche.
Plus d'informations sur CodeProject .
J'ai enfin découvert comment faire via Powershell. Voici les instructions que j'ai suivies pour que cela fonctionne sur Windows 7:
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 .
Téléchargez le module du module PowerShell de sécurité du système de fichiers – il devrait être disponible sous forme de fichier ZIP simple.
J'ai finalement découvert 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 sur Windows 10:
J'ai rencontré ce problème dans Windows 10 et j'ai trouvé cette solution facile.
Si vous avez Bash sur Ubuntu sur Windows installé, vous pouvez copier dans le répertoire parent dans une invite de commande régulière, puis tapez:
bash -c "rm -rf dirname_here"
Ce qui lance bash, supprime récursivement le répertoire à partir de linux où il n'y a pas de restrictions de nom de fichier, puis retourne à votre invite de commande ordinaire.