Как удалить файл с слишком длинным путем, чтобы его можно было удалить [duplicate]

203

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

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

Сообщение об ошибке гласит:

Слишком длинный путь.

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

Скриншот

Как я могу удалить файлы в этом случае?

Крис
источник
Будет ли это работать из командной строки с delкомандой? Что-то в этом del *.cacheроде должно удалить все файлы .cache в текущем каталоге.
Райан
«Путь \ к \ папке \ CACHEI ~ Системе не удалось найти указанный файл», - сказал дважды, и там есть 2 файла, но ничего не сделал
Крис
Если подумать, вы можете проверить один из вопросов, на которые уже дан ответ. Это например.
Райан
1
Если эти два файла являются единственными, оставленными в каталоге, то вам может повезти, удалив весь каталог. В командной строке попробуйте rd /s directoryname Это уничтожит directorynameвсе файлы и подкаталоги в нем, поэтому используйте его с осторожностью :)
bitsmack

Ответы:

353

Предполагая, что вы находитесь на окнах:

Что я всегда делаю, так это использую subst для создания ассоциации буквы диска с частью пути.

Затем перейдите к новой букве диска и перейдите к файлам с длинными именами. Теперь вы сможете переименовать / удалить / и т.д. их. Это работает потому, что сам путь больше не содержит> 255 символов.

Создать подпапку

  1. Запустите командную строку (без прав администратора)
  2. Используйте, cdчтобы перейти к папке, которую вы хотите перейти (вы можете использовать tabдля автозаполнения имен
  3. введите subst j: .для создания ассоциации диска. (вместо. вы также можете ввести весь путь)
  4. Теперь в Проводнике у вас есть новая буква диска на этом ПК . Перейдите к нему и сделайте все, что вам нужно сделать с файлами .cache.
  5. Вернитесь в окно cmd и введите, subst /d j:чтобы извлечь диск или, в качестве альтернативы, перезагрузите компьютер.

РЕДАКТИРОВАТЬ: я понял трюк, который может сократить это немного. В окне проводника, в котором у вас возникли проблемы, щелкните адресную строку, чтобы ввести ее, затем введите cmdи нажмите, Enterчтобы запустить командную строку в этом месте, а затем перейдите к шагу 3. :)

РЕДАКТИРОВАТЬ 2: Хорошо, этот трюк может быть расширен еще дальше. Если вы находитесь в проводнике по правильному пути, просто введите в subst j: .адресной строке и нажмите Enter. Появится окно команд, выполните команду и закройте снова, и вот, в проводнике появится новый диск.

LPChip
источник
26
robocopy empty_dir base_nested_dir / purge - просто создайте пустой каталог и скажите robocopy очистить все в целевом каталоге, который не находится в пустом каталоге stackoverflow.com/a/3320317/588759
rofrol
7
Просто попробовал это, и я не смог удалить файл, о котором идет речь. Я использую cygwin с windows, альтернативное решение - удалить файл таким образом: rm -R / path / in / question, если никакая другая программа не использует этот файл. ты в порядке
Джон
1
У меня была проблема, когда SUBST не распознавал J: как параметр (он также не видел доступных виртуальных дисков), поэтому опция cygwin, упомянутая Джоном, работала хорошо.
Тиш
1
@rofrol, вы должны сделать свой комментарий к robocopy ответом: это гораздо проще, чем подход с использованием имен каталогов, когда имеешь дело со множеством дочерних каталогов (например, созданных в node_modules)
Энди Браун
1
Решение Джона сработало очень хорошо для меня, просто добавил -f (параметр силы): rm -R -f / pathToDelete
Кристоф Келлер
66

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

Но чтобы удалить файл, имя которого превышает 255 символов:

  • Откройте командную строку, запустив «CMD.EXE»
  • Перейдите в папку, содержащую файл
  • Используйте команду DIR / X, которая отобразит короткие имена файлов.
  • Удалить используя короткое имя.

то есть, если файл называется «verylongfilename.fil», короткое имя будет отображаться как «verylo ~ 1.fil», и вы можете удалить, используя это имя.

Обратите внимание, что, хотя сама Windows может обрабатывать пути намного длиннее, чем 255 символов, большая часть графического интерфейса, например Windows Explorer, ограничена более коротким пределом.

Дебра
источник
16
Это лучший ответ, чем принятый на.
Бен
3
Выбранный ответ лучше, потому что вы можете удалить целые папки с помощью этого метода
mcont
2
но в windows 7 кажется, что DIR / x вообще не меняет отображение здесь ... :(
gumuruh
3
Некоторые файловые системы NTFS НЕ имеют 8,3 эквивалента. Так что это не всегда работает больше.
Росс Прессер,
Del / S из CMD работал для меня даже с большим именем на 8.
Джефф
5

Googled: удалить длинное имя файла Первый результат

Используйте Unlocker http://www.filehippo.com/download_unlocker/

Невозможно удалить папку: она используется другим пользователем или программой. Невозможно удалить файл: доступ запрещен. Произошло нарушение совместного доступа. Возможно, используется исходный или целевой файл. Файл используется другой программой или пользователем. Убедитесь, что диск не заполнен и не защищен от записи, и что файл в данный момент не используется.

Unlocker может помочь! Просто щелкните правой кнопкой мыши папку или файл и выберите Unlocker. Если папка или файл заблокированы, появится окно со списком шкафчиков. Просто нажмите Разблокировать все и все готово!

Wutnaut
источник
1
Я видел это, но не знал, безопасно ли использовать разблокировщик, поэтому я проигнорировал это, я попробую это. РЕДАКТИРОВАТЬ: не работает. он работает с другими файлами, но разблокировщик не отображается в раскрывающемся списке
Chris
Конечно, самый простой способ сделать это, хотя для завершения может потребоваться перезагрузка. Нет ничего плохого в Unlocker - его используют годами, и это очень полезная утилита. В случае файла или папки, чей путь слишком длинный, он не найдет дескриптор блокировки, но должен предложить опцию Удалить в раскрывающемся списке впоследствии.
Стив Петтифер
1
Работал безупречно - забавно то, что я установил это программное обеспечение, но мне не пришло в голову использовать его в этой ситуации.
Даниэль Соколовский
Не сработало для другой папки, где я скопировал папку с круглым соединением, но что сработало, так это переименование каждой папки уровня в один символ, как 1и раньше, а затем ее удаление.
Даниэль Соколовский
Это был единственный ответ, который работал для меня (я использую Windows 10). Большое спасибо!
user26832
4

У Microsoft есть полезная статья базы знаний по удалению файлов, которые невозможно восстановить . Причина № 4 имеет отношение к вам.

Лучше всего было бы сопоставить диск с папкой, в которой находится файл (разрешение № 3), затем войти через этот диск и удалить его.

Compro01
источник
1
Я никогда не осознавал, что могу «сопоставить сетевой диск» с местом на своем жестком диске. Это то, что я сделал в Windows Explorer. После перехода на диск я мог легко удалить папку и ее содержимое. Тот же принцип, что и для консольных решений, показанных выше, но это быстрое решение с графическим интерфейсом, которое мне было проще.
RandomHandle