422 votes

Comment supprimer des répertoires dont les chemins/noms sont trop longs 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 ces fichiers d'être créés.

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

Ce sont les mêmes erreurs cette question Je ne sais pas toujours quels fichiers ou sous-répertoires spécifiques sont à l'origine du problème. Et j'essaie d'éviter tout processus manuel (autre que le déclenchement d'une commande unique) pour les supprimer réellement.

Si j'essaie de supprimer le répertoire à partir de l'Explorer, 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 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>

Quelqu'un connaît-il un outil ou un moyen facile de contourner cette erreur de suppression sans avoir à trouver manuellement les fichiers problématiques et à les déplacer/renommer ?

2 votes

J'ai trouvé la solution juste avant de poster cette question, mais comme d'autres peuvent rencontrer ce problème, j'ai décidé de la poster pour qu'ils puissent trouver la solution que j'ai trouvée.

0 votes

Oh, je sais, mais généralement, lorsque je fais ce genre de choses, je laisse la question "sans réponse" pendant un certain temps pour voir si quelqu'un d'autre a une meilleure solution.

0 votes

Par Far la solution la plus simple : youtube.com/watch?v=qQTyTprFAOg

0voto

Aupajo Points 2387

J'ai finalement trouvé comment le faire via Powershell. Voici les instructions que j'ai suivies pour que cela fonctionne sous Windows 7 :

  1. Créez un nouveau dossier appelé Sécurité NTFSS dans le dossier C:\Users\XXXX\Documents\WindowsPowerShell\Modules\NTFSSecurity , donde XXXX est votre nom d'utilisateur Windows. Exemple : si mon nom d'utilisateur est " aspnyc "le nouveau dossier serait C:\Users\aspnyc\Documents\WindowsPowerShell\Modules\NTFSSecurity .

  2. Télécharger le Module PowerShell sur la sécurité des systèmes de fichiers - il devrait être disponible sous la forme d'un simple fichier ZIP.

  3. Ouvrez une console Powershell, exécutez Get-Module -ListAvailable et s'assurer que Sécurité NTFSS apparaît quelque part dans la liste des modules enregistrés.

  4. Dans la console Powershell, exécutez Module d'importation NTFSSecurity .

  5. Dans la console Powershell, exécutez Remove-Item2 "YYYY" -RecourseYYYY est le chemin d'accès Windows au dossier que vous souhaitez supprimer de manière récursive (par ex. C:\Potatoes\Badgers\FolderToDelete ).

0voto

nuwan Points 21

J'ai finalement trouvé comment le 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écharger le Module PowerShell sur la sécurité des systèmes de fichiers - il devrait être disponible sous la forme d'un simple fichier ZIP.
  2. Extraire 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 d'administration (alias Admin Mode) et exécutez Get-Module -ListAvailable et s'assurer que Sécurité NTFSS apparaît quelque part dans la liste des modules enregistrés.
  4. Exécuter Politique d'exécution illimitée (Set-ExecutionPolicy) pour contourner le mode d'exécution signé. Vous devez confirmer cette action par un Y(es).
  5. Eventuellement cd au dossier que vous voulez supprimer.
  6. Dans la console Powershell, exécutez Module d'importation NTFSSecurity .
  7. Dans la console Powershell, exécutez Remove-Item2 "YYYY" -RecourseYYYY est le chemin d'accès relatif ou absolu de Windows au dossier que vous souhaitez supprimer de manière récursive (par ex. C:\Potatoes\Badgers\FolderToDelete ).
  8. Vérifiez si ça a marché.
  9. Finalement, le mode d'exécution signé est rétabli avec Politique d'exécution restreinte (Set-ExecutionPolicy) . Vous devez confirmer cette action avec Y(es).

0voto

Takneik Points 141

En élargissant à la réponse de Jordanbtucker :

Si vous avez le paquet NodeJS npx, vous pouvez simplement exécuter cette commande sans avoir à installer le paquet globalement.

npx rimraf <dir>

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X