удалить рекурсивный каталог, созданный robocopy, когда «Имя файла слишком длинное»

9

После запуска robocopy.exe для резервного копирования папки C: \ Users \ без использования /xjпереключателя я получил рекурсивный каталог, который был слишком длинным. Например, если вы запустите, dir /b /sвы получите следующую ошибку:

Имя каталога 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 слишком длинный.

Я попытался удалить его с помощью, rmdir "Application Data" /sно я получил ошибку "Имя файла слишком длинное"

Я смотрел на другие решения, но думал, что смогу использовать инструмент, который вызвал проблему, чтобы решить ее.

Аарон
источник

Ответы:

14

Создайте пустой каталог с помощью mkdir empty, а затем используйте, robocopy empty\ "Application Data\" /mir"который удалит все дерево каталогов. Тогда выдают rmdir emptyи rmdir "Application Dataубирают и все готово.

Аарон
источник
3
+1 Невероятно, что для этого требуется что-то тайное, чтобы сделать что-то такое же простое, как удаление папки ...
nextgentech
Эта глючная бесконечная рекурсивная папка сводила меня с ума! Спасибо.
Зофрен
4

Возможно, вам удастся cdзаглянуть в каталог достаточно глубоко, чтобы удалить то, что ниже, и cdснова вернуться наверх и удалить то, что осталось.

Если это не сработает, но вы все еще застряли, загрузите бесплатную демо- версию моей оболочки Hamilton C (полное раскрытие: я автор) и используйте rmприлагаемую утилиту, используя -r(рекурсивный) и -x(удалите все что угодно). ) опции.

rm -rx directoryname

My rmиспользует новый формат длинных имен файлов Unicode для внутренних целей , позволяя ему манипулировать путями длиной до 32K символов, и это должно его получить.

Если вы обнаружите, что проблема также связана с разрешениями, вам может потребоваться использовать sudoили suповысить, например,

sudo rm -rx directoryname

В действительно упорных случаях вы можете быть заблокированы ACL, который запрещает доступ, например, caclsотчеты Everyone:(DENY). В этом случае вам может потребоваться удалить этот ACE (запись контроля доступа).

cacls directoryname /e /r everyone

Наконец, я действительно собираюсь помочь. Журналы моего сервера говорят мне, что люди загружают мое программное обеспечение, чтобы попробовать это, и я хочу, чтобы это работало. Если вы столкнетесь со случаем, когда этого не произошло, я надеюсь, что вы протянете мне руку, чтобы я мог отладить почему и заставить это работать. То, что вы не можете удалить, часто случается, и я бы хотел, чтобы все случаи были раскрыты.

Николь Гамильтон
источник
3

Вы также можете попробовать один из следующих;

Решение 1. Используйте автоматически сгенерированное имя 8.3 для доступа к файлу.

Решение 2. Переименуйте или переместите глубокую папку

Решение 3. Сопоставьте диск с папкой в ​​структуре пути. Сопоставьте диск с папкой внутри структуры пути целевого файла или папки. Этот метод сокращает виртуальный путь.

Решение 4. Используйте сетевой ресурс такой же глубины, как папка. Если разрешение 1, 2 и 3 неудобны или не решают проблему, создайте сетевой ресурс, который находится как можно глубже в дереве папок, а затем переименуйте папки, получив доступ к общему ресурсу.

Решение 5: Используйте инструмент, который может пройти глубокие пути

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

Шон
источник
похоже, что это решение типа «Резолюция 5: Используйте инструмент, который может проходить глубокие пути»
Аарон