Вопрос Как удалить файл в Windows со слишком длинным именем файла? [Дубликат]


На этот вопрос уже есть ответ:

У моей жены есть несколько файлов и папок, которые каким-то образом заканчиваются тем, что у них есть имена файлов, которые заставили их быть неспособными (не могут быть удалены) обычными средствами или через командную строку. Я считаю, что имена файлов слишком велики из-за глубины структур папок. Кто-нибудь знает о хорошей утилите для очистки таких файлов?


195
2017-09-23 15:56


происхождения


Как были созданы эти файлы? - Nick
Извините за мое невежество в этой теме, но не должно Windows обрабатывать эти файлы? Не следует ли, что Уильям Эддиньз будет делать автоматически Windows (даже из проводника)? - Stefanos Kalantzis
@ Mokubai - дублированный вопрос должен быть отмечен дубликатом этого, так как этот вопрос старше, - cybermonkey
@cybermonkey: И у него есть лучший ответ. - Ellesedil
Для дальнейших читателей 7zip Метод с CTRL + DELETE это самый простой метод, на мой взгляд ... - Christian Gollhardt


ответы:


Когда вы хотите полностью удалить каталог, и в нем есть файл с длинными именами внутри, robocopy делает ОЧЕНЬ хорошую работу:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /s /mir
rmdir empty_dir
rmdir the_dir_to_delete

Это работает, потому что robocopy внутренне использует версии Win32, поддерживающие Unicode, с \\?\ префикс для путей к файлам; эти функции имеют предел 2¹⁶-1 (32,767) символов вместо 259.

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


415
2017-08-29 13:38



Эффективен, если в файловой системе нет короткого имени (8.3). - Antoine RODRIGUEZ
Это хорошо работало с моим упрямым Windows Store файлы кеша которые отказались удалить. Благодаря! - Samir
Мне пришлось добавить / очистить линию robocopy, чтобы это сработало, но после этого он сделал трюк - actionshrimp
Robocopy - это то, что привело меня в этот беспорядок, но мне никогда не приходило в голову использовать Robocopy, чтобы вытащить меня из этого. Отличный ответ! Благодаря! - Jay Michaud
@SarahofGaia, мой плохой, это 2¹⁶ - 1 на самом деле - Benoit


Из командной строки:

dir /X

Это отобразит ваши файлы / папки в сокращенном формате. Затем используйте короткое имя точно так же, как написано для удаления файла:

del LONGF~1.txt

89
2017-09-23 16:01



Мне нравится этот, это хороший бит бокового мышления. - Col
Хотя я не могу гарантировать, что он будет работать в этом случае, я использовал его несколько раз, чтобы удалить папки с недопустимыми символами в конце, которые делают их невозможными для удаления обычными способами. - Will Eddins
Это работает для файлов и папок в текущем каталоге, но если вам как-то удастся найти себя внутри папка, путь которой слишком длинный, это не поможет. Например, я нахожусь в консоли слишком длинным путем и не могу даже dir или cd .., - Bobson
@Bobson Если вы не можете dir использование pushd вместо. Это сработало для меня. - BadHorsie
Это не работает с Windows 10, отображаемое имя файла является длинным - Loenix


Я продвигаю свой путь в путь, переименовывая каждую последующую родительскую папку в «1» и пытаясь удалить. Вы эффективно сокращаете путь каждый раз, и мне никогда не приходилось работать более чем с 4 или 5 каталогами, пока я наконец не смогу удалить всю структуру каталогов (что может быть или не быть тем, что вы хотите). Вы можете сделать это и из последней дочерней папки, а также работать вверх или вниз.


51
2017-09-23 17:40



Это единственное, что сработало для меня. Все остальные трюки, приведенные здесь и на других форумах, таких как это, не сработали. - Andrew Arnott
Рад помочь... - joeqwerty
Было единственным предложением, которое работало довольно странно. - Nestor Ledon
Не удается сделать это в Windows 10 ... rename throws «filename to long» error - Dawesi
Это не только устранило проблему для меня, но и объясняет, как я столкнулся с проблемой в первую очередь. У меня, должно быть, был путь, который был близок к пределу, тогда я переименовал родительскую папку (добавил что-то вроде «резервное ноябрь 2016 сохранить» в имя), которое переместило файлы в подпапки за лимит. Хорошо знать причину, а также решение, хотя я знаю, что это может произойти и другими способами, я думаю, что это обычный способ общения с людьми. - eselk


В некоторых программах, включая Command Prompt (cmd.exe), вы можете обойти ограничение длины файла путем префикса полного пути с помощью \\.\ как это:

\\. \ C: \ some directory \ other directory \ файл с длинным именем

13
2017-09-23 16:12



не работает в окнах 10 - Dawesi
спасибо, cmd сработал с этим в Win7 rm -rf \\directoryname - Philip Pryde


Трюк, который я использовал, чтобы обойти ограничение длины и пути к файлу, чтобы переместить, скопировать или удалить что-то, - это сократить его путем «взлома» на полпути (или более) используя сопоставленную букву диска, указывающую на путь папки по пути,

поэтому у вас есть c: \ some \ long \ path ... \ and \ foo \ bar \ folders \ oldfiles \ myoldfile.txt.

Затем сопоставьте произвольную букву диска где-то по пути, так что первый фрагмент пути будет иметь длину всего несколько символов. Предпосылка - папка должна находиться в общей папке (которая может быть уже на сервере, где мне нужно это делать), и если она еще не выбрана, то выберите папку где-нибудь в пути и поделиться им. В зависимости от уровня вашей среды и уровня паранойи, разрешите каждому изменять доступ к ресурсу до тех пор, пока разрешения NTFS будут достаточно жесткими. Если вы хотите, просто разрешите изменять права только на свою учетную запись.

Теперь перейдите в общую папку или одну внутри нее и поделитесь ею или используйте командную строку следующим образом. Предположим, что вы разделили папку «foo» как «fooshare», тогда вы могли бы сделать

net use x: \\mycomputername\fooshare\bar\folders /persistent:no

и X: диск теперь указывает прямо на папку «папки» внутри этого общего ресурса, поэтому «x: \ oldfiles \ myoldfile.txt» теперь довольно короткий.

(«/ Persistent: no» означает, что это не выдержит следующую перезагрузку и смущает вас позже. Не забудьте отключить папку, когда закончите.)

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

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


13
2018-02-21 17:18



вы можете избежать совместного использования, используя subst x: C:\Some\first\part\of\the\long\path и затем удалите диск с помощью subst x: /d - mihi
Хорошая попытка, но когда у вас 10 вложенных папок k, это невозможно. - Julian Knight
subst трюк, кажется, работает хорошо, если имя файла не является так пока он переместит более 260 символов даже в корень диска. - Stephen Chung
Вам также не нужно явно передавать какую-либо папку с помощью net use, вы можете использовать общие права администратора admin: net use x: \\localhost\c$\bar\folders /persistent:no - kapex


Самый простой способ, который я нашел, - загрузить с компакт-диска ubuntu live.

В качестве альтернативы вы можете создать общую папку на полпути вниз по пути, а затем сопоставить сетевой диск с этим и сделать удаление из сопоставленной папки (даже на том же компьютере)


9
2017-09-23 15:59



Забавно, как часто Ubuntu Live CD помогает устранять проблемы Windows ^ ^ - Ivo Flipse♦
Я заметил, что я, изворотливая сеть, попробую жить компакт-диск, проблема с файловой системой, попробуйте Live CD, поврежденную таблицу разделов и т. Д. И т. Д. :-) - Col
Это единственное решение, которое сработало для меня. Я люблю тебя, Linux! <3 - David Frye
Выполнить bash из Windows Нет необходимости в Linux. ;-) Также, если вы используете Windows 10, просто установите «Подсистему Windows для Linux», в основном окна используют ubuntu api hooks для выполнения этой работы ... utils, включая «apt, ssh, rsync, find, grep, awk, sed, sort, xargs, md5sum, gpg, curl, wget, apache, mysql, python, perl, ruby, php, gcc, tar, vim, emacs, diff, patch и большинство десятков тысяч бинарных пакетов в архивах Ubuntu! «Это очень полная среда разработки Linux, которая просто запускается в Windows. zdnet.com/article/ubuntu-and-bash-arrive-on-windows-10 - Dawesi
cygwin - еще одна альтернатива для запуска команд LINUX в ​​окнах - atom88


Переименуйте каталог для вырезания / вставки файла в другое место, а затем удалите его. Работает здесь.

Или просто из командной строки, если вам не нравится проходить через неприятности.


5
2017-09-23 19:39



Это работает как шарм. Копайте там (для меня это было супер-гнездо node_modules папки), перетащите его на рабочий стол и удалите. Прополощите и повторите, когда вы поднимаетесь по нескольким папкам за раз. Какая неприятная проблема. - nickb
Это не сработало для меня - операция пасты завершилась неудачно из-за длинного имени файла - неважно, где ее вырезать. - UpTheCreek