Вопрос: Как удалить каталоги с путями / именами слишком долго для обычного удаления


При попытке удалить Windows, похоже, имеет ограничение длины на имена файлов, хотя это не будет препятствовать созданию этих файлов.

Наш процесс сборки создает несколько временных файлов (многие из них строятся из WSDL), которые преследуют этот предел. Наш скрипт ant как-то может удалить их, когда делает чистую, но иногда мне нужно удалить каталог рабочей области (где все временные файлы идут), не выполняя при этом полную очистку от муравья.

Это те же ошибки этот вопрос, но ответы там действительно не работают для меня, поскольку я имею дело с каталогом, а не с файлом, и я не всегда знаю, какие конкретные файлы или подкаталоги вызывают проблему. И я пытаюсь избежать ручного процесса (кроме запуска одной команды), чтобы фактически удалить их.

Если я попытаюсь удалить каталог из Проводника, я получу ошибку

Cannot delete [file name]: The file name you specified is not valid or too long.  
Specify a different file name

Попытка Remove-Item в powershell дает следующую ошибку:

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>

Кто-нибудь знает какие-либо инструменты или простые способы обойти эту ошибку удаления без необходимости вручную находить файлы проблем и перемещать / переименовывать их?


349
2017-12-03 19:23


Источник


Я нашел решение перед публикацией этого вопроса, но, поскольку другие могут столкнуться с этим, я решил опубликовать его, чтобы они могли найти решение, с которым я столкнулся. - Herms
О, я знаю, но обычно, когда я делаю такие вещи, я оставляю вопрос «без ответа» на некоторое время, чтобы узнать, есть ли у кого-нибудь лучшее решение. - Herms
От далеко простейшее решение: youtube.com/watch?v=qQTyTprFAOg - TaW
с помощью Ubuntu или любой другой Linux Bootable CD мы можем загрузить наш компьютер Ubuntu или любую другую ОС для временных. Затем мы можем выбрать папку, и мы можем легко ее удалить. - kelum priyadarshane
У этого более старого вопроса есть и интересные ответы: superuser.com/questions/45697/... - AdamV


Ответы:


Использовать 7-Zip File Manager, чтобы удалить их. использование сдвигDEL insinde 7zip File Manager (иначе Windows пытается переместиться в Корзину, которая снова сработает).


392
2017-12-03 19:48



Спасибо - это избавилось от дерева, которое немного рекурсивно и было слишком глубоким для del / rmdir / rm / explorer, чтобы удалить - Martin Beckett
работал отлично, используя shift + Del - 7zip не смог отправить файлы с длинными патчами в корзину. - cori
+1 7zip. Вы должны перейти в папку, а затем использовать shift + Del как @cori сказал. Если вы выберете Delete вариант из контекстного меню, это WILl не работает. shift + Del Это! - Urda
7zip не работал для win7 64, поэтому Linux сделал. - Erik Friesen
Я повышаю это, потому что с помощью 7zip вы можете удалить и удалить папку, в которой хранятся длинные вложенные папки. У меня была проблема с папкой node_module, в которой содержалось множество вложенных папок, и я не смог ее удалить. 7zip исправлен из базовой папки безупречно. +1 - Gruber


Ни один из других (бесплатных) ответов здесь не работал, но я нашел один на другом сайте:

rimraf <dir>

rimraf это Node.js пакета, поэтому вам нужно будет установить Node.js, который включает НПМ, Затем вы можете запустить:

npm install -g rimraf

Затем вы можете запустить rimraf из командной строки.

Я нашел это решение, потому что сама npm вызывала эту проблему из-за того, как она устанавливает зависимости.

Кстати, rimraf получает свое имя от команды UNIX rm -rf, который рекурсивно удаляет файлы и папки.


306
2017-07-04 06:23



Пробовал много способов. Это просто отлично! - Duckegg
Лучший ответ от всех :) да его легкий beasy - Al-Mothafar
Это должен быть принятый ответ. - NINCOMPOOP
Ваше решение работает, но это так f ## k-up, что я должен использовать модуль js узла для удаления папок модулей js узла ... Я больше не хочу жить на этой планете - Benoit P
Узел создал проблему в первую очередь для меня так ... интересно ... что у них также есть решение. - Eric J.


Там есть нет необходимости устанавливать какую-либо программу для решения этой проблемы.

Эта проблема легко решается с помощью robocopy, предустановленная с Windows Vista, запущенная в 2006 году.

Например, rmdir /S /Q <dir> в некоторых случаях отчет был неудачным. Нет необходимости использовать 7zip или любой другой сторонний инструмент. Powershell - это излишество. Cygwin может работать, но вы не можете его установить. Итак, давайте сосредоточимся на robocopy

Идея состоит в том, чтобы

  1. использование robocopy скопировать + обновить
  2. из новая пустая папка 
  3. в папку, которую вы хотите удалить, цель.

После извлечения robocopy, целевой каталог также будет пустым.

Эти инструкции предназначены для командной строки. Просто откройте поиск в Windows, введите cmd и нажмите Enter.

Предположим, что мы хотим удалить папку, цель

C:\delete\this folder\with a very long name 

  1. Сначала создайте пустой каталог, f.i. C:\emptyfolder,

    mkdir C: \ emptyfolder

  2. Скопируйте + обновление из пустого каталога в цель, используя опцию «/ purge»

    robocopy c: \ emptyfolder "C: \ удалить \ эту папку \ с очень длинным именем" / очистить

  3. Удалите пустой каталог. Вам это больше не нужно.

    rmdir c: \ пустая папка

Поскольку в исходной папке нет файлов или папок (C:\emptyfolder), он просто удаляет файлы и папки под целевым каталогом (C:\delete\this folder\with a very long name) рекурсивно!

  • Окончательный трюк: вы можете не писать вручную

    C: \ удалить \ эту папку \ с очень длинным именем

    Перетащив папку из окна проводника и опустив ее в окно Terminal / cmd.

Быть осторожен: Удаленные файлы не пойдет в мусор папка! После удаления файлы не могут быть восстановлены.

(Взято из «Путь слишком длинный? Используйте Robocopy» от BVLANGEN)

PS: Я понимаю, что этот ответ был здесь, менее дидактически. Как удалить файл в Windows со слишком длинным именем файла? [Дубликат]

Benoit добавлено:

Возможно, вам придется пройти этот процесс несколько раз, чтобы избавиться от всех файлов.


116
2018-03-03 16:45



Спасибо, сэр! Это должен быть принятый ответ, так как все остальные не работает или требуется Сторонний инструмент, :) - MickyD
Это прекрасно работает ... не нужно ничего устанавливать (насколько я знаю), и это быстро. Это должен быть принятый ответ! - ksumarine
Это сохраняет некоторые (или все) дерева каталогов в разделе «c: \ deletefolder» (целевой каталог). Во всяком случае, удалил все в мигание для меня (думаю, файлы были небольшими), и мне просто пришлось вручную <Del> "c: \ deletefolder", дочерние dirs были удалены без проблем. Работал как шарм. +1, должен быть принятым ответом! :) - rld.
@rld, но раньше существовала «deletefolder»? В противном случае, я думаю, он должен быть пустым, если это новый каталог. В противном случае это беспорядок. Я могу добавить последний шаг для «rmdir deletefolder». - hectorpal
@hectorpal 1. У меня было дерево с остатками резервной копии диска Windows C с другой машины, которую мне удалось удалить, за исключением очень длинных частей, т.е. "% USERPROFILE% / Foo / very_long_dirname / vldn2 / vldn3 /(...)/ very_long_filename". 2. cd ~; mkdir empty; robocopy empty foo /purge 3. Осталось с ~ / foo / maybe_something_deeper_too_cant_remember / и на самом деле не занимало больше времени для дальнейшего расследования, потому что меня уже злили на M $ за неуважение ко мне и тратили мое время, но простой <Delete> on ~ / foo in explorer удален он успешно, после неудачи бесконечно (даже с владением) до robocopy. - rld.


Я считаю, что нашел способ удалить вещи из cmd, Первоначально я попробовал del , но это не сработало. Тогда я вспомнил rmdir, Выполнение следующих действий:

rmdir /S /Q <dir>

похоже, сработало.


78
2017-12-03 19:24



Не работал для меня. :( - Andrew Arnott
не забудьте заглянуть в cmd, прежде чем пытаться запустить rmdir. - brianpeiris
Для тех, кто не может использовать это решение, у меня есть альтернативное решение, которое сработало для меня (с слишком длинными именами путей / файлов): Переместите файл (ы) / каталог в C: \, чтобы сократить путь, а затем удалите его. - Anders Sandberg Nordbø
Возможно, есть каталоги, для которых это решение не будет работать, что 7-Zip может удалить. Я просто это случилось со мной. - SamStephens
Это решение дает непоследовательные результаты. Пожалуйста, не голосуйте. - hectorpal


Инструмент, который я использовал, когда у меня была эта проблема, была FastCopy, Я выбрал Удалить все в раскрывающемся списке выберите каталог, который я хотел удалить, и нажмите Удалить все,

FastCopy delete dialog screenshot

FastCopy портативен (не требуется установка), и доступны 32-битные и 64-разрядные версии.


29
2017-11-25 20:22



Если вы ищете инструмент командной строки, вы можете использовать небольшой инструмент, который я опубликовал в GitHub (github.com/epsitec/Tools-RecursiveDelete). - Pierre Arnaud
У меня был рекурсивно сгенерированный набор вложенных файлов / папок. Это было единственное решение, - Pierluigi
Это сработало для меня, когда сбой командной строки, попытка 7zip не удалась. и даже поддержка Microsoft была в тупике! - Kit Ramos
То же самое здесь - я как-то начал удалять файлы с помощью 7zip, но он также действовал очень странно, и мне пришлось Shift + Delere каждый каталог несколько раз подряд удалять его, но затем я попробовал этот инструмент и работал как шарм , Запустил его дважды, чтобы избавиться от всех файлов. Благодаря! - Artanis
Спасибо, для меня также единственное рабочее решение, GREAT !!!! - tim


Cygwin-х rm -rf хорошо работает на длинных дорожках!


24
2017-09-26 19:40



Cygwin отлично работал для меня! Просто сделал -rm -rf, и все файлы были удалены. - Ranhiru Cooray
Работал и для меня, и для GNU bash, версия 4.1.10 (4) -release - rjzii
Отлично работает при запуске из командной строки Git Bash. Для этого я установил GitGui. - Albo Best


Без установки дополнительного программного обеспечения вы можете использовать subst команда для временного создания псевдонима в длинном названном каталоге.

например Если вы хотите удалить папку C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted вы можете использовать команду

subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"

и затем вы можете удалить X:\folder to be deleted в проводнике Windows или в командной строке. Чтобы удалить псевдоним буквой диска, используйте команду

subst x: /d

22
2017-10-28 06:09



Я попробовал все другие ответы (включая ответы на другие подобные вопросы), и это было единственное, что оказалось для меня. И это было намного быстрее. - glenneroo
Это, безусловно, лучший ответ: простые, встроенные функции, не возиться с реестром. Должен быть принятый ответ. - Kevin Roche
Легко, самый чистый и самый простой способ, спасибо Кеннет. - Seth