Lorsque vous essayez de supprimer, Windows semble limiter le nombre de noms de fichiers lorsque vous essayez de les supprimer, bien que cela n'empêche pas la création de ces fichiers.
Notre processus de génération crée un certain nombre de fichiers temporaires (dont beaucoup sont créés à partir d’un WSDL) qui s’exécutent au-delà de 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 de la zone de travail (où sont stockés tous les fichiers temporaires) sans effectuer un nettoyage complet à partir de ant.
Ce sont les mêmes erreurs cette question , mais les réponses ne fonctionnent pas vraiment pour moi car je traite avec 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.
Si j'essaie de supprimer le répertoire de l'explorateur, le message d'erreur s'affiche
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 simples de contourner cette erreur de suppression sans avoir à rechercher manuellement les fichiers problématiques et à les déplacer/renommer?
Je pense avoir trouvé un moyen de supprimer des éléments de cmd
. À l’origine, j’ai essayé la commande del
, mais cela n’a pas fonctionné. Puis je me suis souvenu de rmdir
. Faire ce qui suit:
rmdir /S /Q <dir>
semble avoir fonctionné.
Utilisez le Gestionnaire de fichiers 7-Zip pour les supprimer.
Si vous rencontrez toujours des problèmes, assurez-vous d'utiliser Shift+Delete dans le gestionnaire de fichiers 7-Zip. Sinon, Windows essaie de les déplacer vers la corbeille (ce qui échouera à nouveau).
Aucune des autres réponses (gratuites) ici ne fonctionnait 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 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 car npm lui-même était à l'origine de ce problème en raison de la manière dont il imbrique des dépendances.
Au fait, rimraf
tire son nom de la commande UNIX rm -rf
, qui supprime de manière récursive des fichiers et des dossiers.
Il n'y a pas besoin 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é rapporté que rmdir /S /Q <dir>
a é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 l'avez peut-être pas installé. Alors concentrons-nous sur robocopy
L'idée est de
robocopy
pour copier + mis à jourAprès avoir exécuté 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.
Supposons que la suppression de target soit:
C:\delete\this folder\with a very long name
Nous procédons comme suit:
Commencez par créer un répertoire vide, f.i. C:\emptyfolder
.
mkdir C:\emptyfolder
Copiez + mettez à jour du répertoire vide vers la cible, en utilisant l'option /purge
robocopy c:\emptyfolder "C:\delete\this folder\with a very long name" /purge
Supprimer le répertoire vide. Vous n'en avez plus besoin.
rmdir c:\emptyfolder
Puisqu'il n'y a aucun fichier ou dossier dans le répertoire source (C:\emptyfolder
), il supprime simplement les fichiers et les dossiers du répertoire cible (C:\delete\this folder\with a very long name
) de manière récursive!
Dernier truc: vous pouvez éviter d'écrire à la main
C:\delete\this folder\with a very long name
En faisant glisser le dossier depuis une fenêtre de l'Explorateur et en le déposant dans la fenêtre Terminal/cmd.
Faites attention : Les fichiers supprimés n'iront pas dans la corbeille ! Une fois supprimés, les fichiers ne peuvent plus être récupérés.
(Extrait de "Chemin trop long? Utilisez Robocopy" de BVLANGEN )
PS: Je me rends compte que cette réponse était là, moins didactiquement. Comment supprimer un fichier sous Windows avec un nom de fichier trop long? [dupliquer]
Benoit ajouté:
Vous devrez peut-être suivre ce processus plusieurs fois pour vous débarrasser de tous les fichiers.
L'outil que j'ai utilisé lorsque j'ai eu ce problème était FastCopy . J'ai sélectionné Supprimer tout dans le menu déroulant, sélectionné le répertoire que je voulais supprimer et cliqué sur Supprimer tout .
FastCopy est portable (aucune installation requise) et il existe des versions 32 bits et 64 bits disponibles.
Le rm -rf
de Cygwin fonctionne bien sur les longs trajets!
Sans installer de logiciel supplémentaire, vous pouvez utiliser la commande subst
pour créer temporairement un alias dans un répertoire nommé long.
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 alors vous pouvez supprimer X:\folder to be deleted
dans l'Explorateur Windows ou dans la commande Invite facilement. Pour supprimer l'alias de lettre de lecteur temporaire, utilisez la commande
subst x: /d
Passez de Powershell à la commande en exécutant ci-dessous:
Cmd /C "rmdir /S /Q <dir>"
La solution de Dentrasi est ce qui a fonctionné le mieux pour moi, mais je voulais publier les étapes spécifiques dans une réponse de niveau supérieur.
Il y a deux choses qui ne sont pas déjà mentionnées dans les réponses existantes.
L'API Windows a une fonction spéciale qui prend en charge les noms de chemin d'accès Unicode de 32 000 caractères maximum (chaque élément pouvant contenir jusqu'à 255 caractères).
Ceci est souvent appelé à tort dénomination UNC mais ce n’est pas lié à la réalité.
Le préfixe utilisé pour indiquer à l'API d'utiliser des chemins Unicode longs est \\?\
comme dans:
\\?\D:\very long path
Les noms UNC sont normalement utilisés pour faire référence à des chemins sur des serveurs distants sous la forme \\servername\path name\file name
. Vous pouvez combiner cela avec le préfixe long path afin que: \\?\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 }
Cette option a été ajoutée aux versions récentes de Windows 10. Elle n’est pas, au moment de la rédaction, activée par défaut car elle nécessite une prise en charge spécifique de l’application. Fait intéressant, PowerShell a une prise en charge intégrée, ce qui permet à cette option d’utiliser les longs chemins directement dans les scripts PowerShell.
Vous pouvez l'activer via l'éditeur de stratégie de groupe si vous possédez une version de Windows. 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 l'activer.Toutes les applications avec des entrées de manifeste appropriées auront désormais accès aux chemins longs standard POSIX. Cela devrait inclure les applications du 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 signalé un problème avec la clé de registre ci-dessus et j'ai donc fait encore plus de fouilles . Il semble que vous puissiez maintenant définir la prise en charge de nom de fichier long avec une clé système:
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)
Ceci ne fonctionne toujours que pour les applications qui sont spécifiquement définies pour l'utiliser (nécessite une entrée dans le fichier manifest.xml de l'application).
Vous devez également noter que vous ne pouvez pas utiliser de noms de chemin relatifs avec cette méthode.
J'aime la solution cmd. Bien que je veuille partager une autre solution de contournement qui ne fonctionne même que dans l'Explorateur: essayez de raccourcir les noms des dossiers parents avant la suppression: des noms plus courts raccourciront le chemin. Dites, vous avez cette arborescence du dossier:
C: \
.. Projets
.. .. Quelques projets impressionnants 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 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 l'intégralité ou une partie de la structure de dossiers, vous pouvez temporairement renommer les dossiers parents et raccourcir le chemin, puis supprimer le dossier. Les noms peuvent être juste des lettres:
C: \
.. Projets
.. .. X
.. .. .. y
.. .. .. .. z
.. .. .. .. .. .. Fichiers réels avec des noms longs, aussi
Dans mon cas, je voulais simplement supprimer tout le dossier avec de nombreux sous-dossiers et fichiers. Donc, je me fichais du nom des dossiers.
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)
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). C’est ainsi que je résous toujours les problèmes nom de fichier trop long.
Vous pouvez également les supprimer en utilisant leur nom abrégé équivalent. dir /x
vous les montrera.
J'ai créé un programme Java simple qui utilise robocopy pour supprimer les fichiers. Le pot est un runnable. Pour une sortie supplémentaire, exécutez-le à partir de la ligne de commande.
https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing
Bigger Directories est également conçu pour cette tâche.
Plus d'infos sur CodeProject .
J'ai essayé toutes les autres réponses, mais elles n'ont pas fonctionné (du 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 souhaitez uniquement supprimer quelques dossiers/fichiers:
Vous avez la réponse parfaite ici (pour les fichiers). 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 en 4 questions ne suffisait à mes besoins. Vous êtes les bienvenus dans le monde.
J'ai fait face à ce problème dans Windows 10 et trouvé cette solution facile.
J'ai finalement découvert comment faire cela via Powershell. Voici les instructions que j'ai suivies pour que cela fonctionne avec Windows 7:
Créez un nouveau dossier appelé NTFSSecurity dans le dossier C:\Utilisateurs\XXXX\Documents\WindowsPowerShell\Modules\NTFSSecurity}, oùXXXXest votre nom d'utilisateur Windows. . Exemple: si mon nom d'utilisateur était "aspnyc", le nouveau dossier serait C:\Utilisateurs\aspnyc\Documents\WindowsPowerShell\Modules\NTFSSecurity.
Téléchargez le package du module PowerShell File System Security - il devrait être disponible sous forme de fichier Zip simple.
J'ai finalement découvert comment faire cela avec Powershell sous Windows 10 où les noms de fichiers individuels étaient trop longs. Voici les étapes que j'ai suivies pour que cela fonctionne avec Windows 10:
Si vous avez installé Bash sur Ubuntu sous Windows, vous pouvez accéder au répertoire parent dans une invite de commande normale, puis taper:
bash -c "rm -rf dirname_here"
Qui lance bash, supprime récursivement le répertoire de linux où il n'y a aucune restriction de nom de fichier, puis revient à votre invite de commande habituel.