supprimer le répertoire récursif créé par robocopy lorsque «Le nom de fichier est trop long»

9

Après avoir exécuté robocopy.exe pour sauvegarder un dossier C: \ Users \ sans utiliser le /xjcommutateur, je me suis retrouvé avec un répertoire récursif qui était trop long. Par exemple, si vous exécutez, dir /b /svous recevrez l'erreur suivante:

Le nom du répertoire C: \ Users \ ... \ AppData \ Local \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data est trop long.

J'ai essayé de le supprimer avec rmdir "Application Data" /smais j'ai reçu l'erreur "Le nom du fichier est trop long"

J'ai examiné d'autres solutions, mais j'ai pensé que je pourrais être en mesure d'utiliser l'outil qui a provoqué le problème pour le résoudre .

Aaron
la source

Réponses:

14

Créez un répertoire vide avec mkdir empty, puis utilisez robocopy empty\ "Application Data\" /mir"ce qui supprimera toute l'arborescence des répertoires. Ensuite , lancez un rmdir emptyet rmdir "Application Datapour nettoyer et vous avez terminé.

Aaron
la source
3
+1 Incroyable qu'il faut quelque chose d'aussi arcanique pour faire quelque chose d'aussi simple que de supprimer un dossier ...
nextgentech
Ce dossier récursif infini buggy me rendait fou! Je vous remercie.
Zofren
4

Vous pourrez peut-être cddescendre assez profondément dans le répertoire pour supprimer ce qui est en dessous et cdremonter en haut et supprimer ce qui reste.

Si cela ne fonctionne pas et que vous êtes toujours bloqué, téléchargez la version de démonstration gratuite de mon shell Hamilton C (divulgation complète: je suis l'auteur) et utilisez l' rmutilitaire qui l'accompagne en utilisant le -r(récursif) et -x(supprimer tout ) options.

rm -rx directoryname

My rmutilise le nouveau format de nom de fichier Unicode long en interne, lui permettant de manipuler les chemins jusqu'à 32 Ko de caractères, et cela devrait le faire.

Si vous découvrez que le problème implique également des autorisations, vous devrez peut-être utiliser sudoou suélever, par exemple,

sudo rm -rx directoryname

Dans les cas vraiment tenaces, vous pouvez être bloqué par une liste de contrôle d'accès qui empêche l'accès, par exemple, les caclsrapports Everyone:(DENY). Dans ce cas, vous devrez peut-être supprimer cet ACE (entrée de contrôle d'accès).

cacls directoryname /e /r everyone

Enfin, j'ai vraiment l'intention que cela soit utile. Mes journaux de serveur m'informent que les gens téléchargent mon logiciel pour essayer ceci et je veux que cela fonctionne. Si vous rencontrez un cas où cela ne s'est pas produit, j'espère que vous allez me contacter pour que je puisse déboguer pourquoi et le faire fonctionner. Les choses que vous ne pouvez pas supprimer se produisent souvent et j'aimerais que tous les cas soient couverts.

Nicole Hamilton
la source
3

Vous pouvez également essayer l'une des options suivantes;

Résolution 1: utilisez un nom 8.3 généré automatiquement pour accéder au fichier

Résolution 2: renommer ou déplacer un dossier profond

Résolution 3: mappez un lecteur à un dossier dans la structure du chemin d'accès mappez un lecteur à un dossier à l'intérieur de la structure du chemin d'accès du fichier ou du dossier cible. Cette méthode raccourcit le chemin virtuel.

Résolution 4: utilisez un partage réseau qui est aussi profond que le dossier Si les résolutions 1, 2 et 3 ne conviennent pas ou ne résolvent pas le problème, créez un partage réseau qui est aussi profond que possible dans l'arborescence de dossiers, puis renommer les dossiers en accédant au partage.

Résolution 5: utilisez un outil qui peut parcourir des chemins profonds

http://support.microsoft.com/kb/320081

Shawn
la source
cette solution semble être un type de "Résolution 5: utiliser un outil qui peut parcourir des chemins profonds"
Aaron