Принудительно удалять файлы с довольно большим именем

62

Я регулярно использую Node.js для управления зависимостями для программ, которые я пишу, ничего страшного. Сегодня я получил такую ​​структуру папок:введите описание изображения здесь

Попытка удалить любой файл встретилась с этой ошибкой:

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

Он был уже в C: \, поэтому он не станет намного короче.

Seiyria
источник
Есть ли у вас какие-либо идеи, как ваша структура папок стала такой большой, я сталкивался с такой же ситуацией при установке grunt.
Эран Отцер
1
@eranotzer с помощью npm.
Сейрия
я не сделал зависимости в вашем пакетах.json, где написано неправильно?
Эран Отцер
@eranotzer Да. Из-за того, как работал npm @ 2, каждая зависимость вкладывала в себя свои зависимости. Это означало, что цепочки зависимостей могут быть произвольно длинными. npm @ 3 пытается отрегулировать это поведение.
Сейрия

Ответы:

75

Используйте инструмент Microsoft robocopy.exe.

  1. Создайте новую пустую папку, например c:\empty
  2. Затем скопируйте эту пустую папку в папку, которая содержит длинные имена файлов, которые вы пытаетесь удалить, например c:\myannoyingfolder. Сделайте это так в командной строке:

    robocopy / MIR c: \ empty c: \ myannoyingfolder

Фло
источник
Поскольку это довольно часто является частью моего рабочего процесса, я выяснил, как интегрировать его с оболочкой Windows. Смотрите мой ответ ниже. :)
toddmo
Примечание: выполнение этой команды может занять несколько секунд или даже минут. Так что не волнуйтесь, и пусть это сделает волшебство :-)
Адил Малик
Спасибо, сработало для меня. Я должен был убедиться, что я также уничтожил любой процесс (IIS), который все еще держался за один из файлов.
Слик Синоби
Всякий раз, когда я пытаюсь открыть robocopy.exe, окно мигает секунду, а затем ничего не происходит. Пожалуйста, помогите
Маулик Моди
29

Хорошо, скажем, вы хотите удалить дерево D:\very\long\path, вам не обязательно использовать какие-либо инструменты, такие как Robocopy.

  1. Перейдите в корневой каталог диска, который содержит каталог, который вы не можете удалить
  2. Создать каталог с одним буквенным именем, например D:\a
  3. Перейдите в каталог, который вы хотите удалить, в этом случае D:\very\long\path
  4. Выберите все ( Ctrl+ A) и Вырежьте ( Ctrl- X)
  5. Перейдите к папке, которую вы только что создали
  6. Вставить ( Ctrl- V)
  7. Теперь перейдите в корневой каталог и удалите временную папку, в этом случае D:\a
  8. Затем вернитесь и удалите исходный каталог
gd73
источник
2
Это не сработало для меня с первой попытки для меня. Однако после повторения этой процедуры еще несколько уровней папок позволили мне все удалить.
abaldwin99
1
Отличное решение, работало без нареканий. Просто и эффективно, спасибо!
Caner Öncü
ЗДОРОВО!! работает как шарм !!! никаких других инструментов не требуется. Спасибо!
Прасант КЦ
Это прекрасно работает, и я бы добавил к этому следующее: если выбор файлов из пути не работает, вы можете выбрать папку где-то в середине длинного пути и вместо этого переместить эту папку во временную папку, а затем удалить оба одинаково.
Нараяна Нагиредди
4

Я начал печатать эту проблему, пытаясь выполнить множество команд, включая del /Fи rmdir /S(а также удерживая нажатой клавишу shift при удалении, чтобы попытаться обойти корзину). Я думаю, что на rmdir /Sсамом деле все файлы были удалены, поэтому я смог продолжить удаление папок, которые были конечными узлами, а затем продвигаться вверх по дереву на несколько узлов за раз. В конце концов я вымыл их всех, но это было смешно.

Seiyria
источник
4

Вы можете интегрировать эту функциональность в оболочку Windows. Мое улучшение ответа Фло было слишком длинным для комментария.

Я добавил Deleteкоманду в контекстное меню Windows.

введите описание изображения здесь

delete.regФайл добавляет запись реестра , чтобы связать папки с robodelete.batкомандным файлом.

delete.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Delete]

[HKEY_CLASSES_ROOT\Directory\shell\Delete\command]
"Extended"=""
@="\"D:\\Documents\\robodelete.bat\" \"%1\""

robodelete.bat

mkdir c:\empty
robocopy /MIR c:\empty %1
rmdir %1
rmdir c:\empty

Примечание . Возможно, вам потребуется изменить пути в обоих файлах в соответствии с вашими предпочтениями.

ВНИМАНИЕ : отменить эту команду невозможно. Он не использует корзину и не запрашивает Y / N для подтверждения перед уничтожением папки навсегда!

toddmo
источник
Спасибо за предупреждение. Мне это нужно и в моем рабочем процессе, но я бы хотел, чтобы в моем меню правой кнопки мыши не было ядерной кнопки, в которой отсутствует подтверждение Y / N. Если у меня будет время, я сделаю снимок и внесу изменения.
abaldwin99
1
@ abaldwin99, вот так может быть stackoverflow.com/a/1807318/1045881
toddmo
4

Средство командной строки SuperDelete с открытым исходным кодом ( GitHub ) работало для меня после сбоя других параметров (Windows 10).

Джошуа Фокс
источник
3

Лучший способ сделать это - использовать robocopy, я задокументировал это в своем личном блоге, чтобы вы могли следить за ним:

http://clintboessen.blogspot.com.au/2014/05/how-to-delete-files-which-exceed-255.html

Clint
источник
4
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится или исчезнет.
Андреа
0

Во многих случаях, CDing в каталог из командной строки и с помощью DEL будет работать.

Если нет, вы должны обработать свое имя ВВЕРХ в дереве каталогов: переименуйте папку самого низкого уровня в более короткое имя (например, «a»), затем в следующее более высокое имя папки и так далее, пока общий путь не станет достаточно коротким. Работая снизу вверх, вы всегда манипулируете именами, у которых полный путь короче, чем у конечных файлов.

Евгений Рик
источник
0
  • Откройте административную командную строку
  • net use z: c:\path
  • del z:\*.*

Твик соответственно. Z: это просто произвольная буква диска для сопоставления пути с ошибкой. Эта последняя команда удаления удалит ВСЕ каталог, который вы отобразили - так что будьте более конкретны по мере необходимости.

Брэдли Форни
источник
2
Это очень опасно для неопытных пользователей! Существует возможность стереть диск, если все сделано неправильно.
Руди Стрыдом
Договорились на 100%. Обязательно действуйте с осторожностью.
Брэдли Форни
0

Хороший способ - установить загрузочный Linux на pendrive и без проблем удалять файлы с live CD .

Дариуш Филипяк
источник
-1

У меня была та же проблема, и я нашел ее сам, просто переименуйте родительскую папку как можно меньше. Ex. Если наша папка в " D " диск как D: // Папка / Undelete_Folder . Единственное, что вам нужно сделать, это переименовать имя родительской папки так, чтобы вы могли переименовать его в « а ». тогда ваше местоположение будет D: // a / Undelete_folde r. а затем удалите родительскую папку.

Рохит Р
источник
Мало того, что это не обязательно работает (что, если это все еще больше, даже с сокращением?), Но я явно упомянул, что моя папка была в корне диска.
Сейрия
-2

Если все остальное терпит неудачу

Перейти в последний каталог в строке. Вырежьте файлы Вставьте обратно в 4-й или 5-й файл в строке. Тогда [Shift] + [Delete] должны сделать трюк.

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

надеюсь это поможет.

Andre
источник
Это, вероятно, не сработает, потому что у них все еще будет длинный путь к файлу для операции вырезания.
Сейрия