Как удалить папку с длинным именем который не удаляется

Если не удаляется и не переименовывается файл с длинным именем

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

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

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

Сегодня проблема оказалась сложнее, сохранил картинку прямо на рабочий стол и в итоге ни её саму удалить не могу, ни папку, в которой она лежит, т. к. папка рабочего стола – системная. В первую очередь я проверил компьютер на вирусы, подумав, что, возможно, именно из-за них стали появляться проблемы с картинками. Но вирусов было не обнаружено.

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

Среди множества предложенных решений я выбрал наиболее простое и эффективное. Устанавливаем архиватор 7-Zip, если он у вас ещё не присутствует на компьютере. Его можно скачать с официального сайта – https://www.7-zip.org.

Нажимаем правую клавишу мыши, наведя её курсор на нужный для удаления файл. В появившемся меню выбираем 7-Zip – Добавить к архиву.

В появившемся окне задаём короткое название архива (по умолчанию ставится имя файла) и там, где блок Опции, ставим галочку рядом с пунктом “Удалять файлы после сжатия”. Я отметил нужные места красными точками.

Проблемный файл с длинным названием удалится с компьютера, переместившись в архив 7-Zip, который вы в свою очередь точно также сможете легко удалить. Вот и всё. Но лучше всего сразу переименовывать файл с длинным именем при сохранении на компьютер из интернета.

Как удалить неудаляемый файл или папку

Героями третьего эпизода из сериала про неудаляемое становятся файлы и папки. В первую часть статьи я перенес пост из канала Telegram, а остальное написал по мотивам вопросов читателей.

[+] Сегодня в программе

Как удалить файл или папку с очень длинным путем либо с пробелами или точками в конце имени

Коллега спросил, не помню ли я как это делается. Я много чего помню, но точный синтаксис команд регулярно забываю. Поэтому я пишу такие вещи в блог или канал – это мои публичные записные книжки.

Есть несколько вариантов, и я начну с наглядного решения.

Добавление в архив с удалением

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

Добавьте файл или папку в архив 7-Zip или WinRAR с опцией «Удалить файлы после сжатия».

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

Путь с префиксом \\?\

Примеры удаления папки и файла из командной строки:

  • Файл с очень длинным путем
    del «\\?\C:\full-path.txt»
  • Файл с пробелом в конце полного имени
    del «\\?\C:\full-path.txt «
  • Папка с двумя точками в имени
    rd /s «\\?\C:\full-path..»

Сначала идет префикс \\?\ , а затем полный путь к файлу или папке, включая точки или пробелы в конце, если необходимо. Префикс \\?\ используется в пространстве имен файлов Win32. Если он указан, API в Windows не обрабатывают строку с путем, а сразу отправляют ее файловой системе.

Этот метод давно описан в базе знаний Microsoft, а теория есть в документации:

    – в закладки, потому что там описаны и другие причины проблемы с удалением – помимо прочего описывает недопустимые символы ASCII в путях, о чем пойдет речь ниже

В скобках замечу, что вы видели похожий путь \\?\GLOBALROOT в статьях про восстановление файлов из теневых копий и извлечение копии реестра из точек восстановления. В данном случае драйвер создает символическую ссылку на свое устройство в пространстве имен Win32.

Включение поддержки длинных путей

В Windows 10 1607+ можно включить поддержку длинных путей. Выполните команду от имени администратора и перезагрузитесь.

reg add «HKLM\SYSTEM\CurrentControlSet\Control\FileSystem» /v LongPathsEnabled /t REG_DWORD /d 1

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

Как удалить файл или папку с недопустимым символом в имени

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

Полный список недопустимых печатных символов ASCII в путях Windows есть в документации↑ Впрочем, его покажет даже проводник при попытке создания файла или папки с недопустимым символом в имени — попробуйте * или ? . В данном случае файлы были созданы в Linux, где ограничения намного мягче.

Неудаляемые файлы и папки

Понятно, что можно загрузиться в Linux и решить вопрос, но речь про Windows. При удалении в командной строке командами del или rd будет такой же отлуп, как в проводнике при попытке зайти в папку:

del /s /q \\?\C:\temp\*
The file or directory is corrupted and unreadable.

В Windows решение только одно: chkdsk /f C:

Если том используется, проверка начнется после перезагрузки. Затем можно посмотреть отчет в журнале событий, а также убедиться, что объекты перемещены в скрытую папку вида found.000.

Неудаляемые файлы и папки

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

Неудаляемые файлы и папки

Также занятно, что в проводнике «недопустимые» символы из WSL отображаются по-разному в папке и результатах поиска.

Неудаляемые файлы и папки

Как удалить файл или папку при недостатке прав

Я не люблю менять права, практически никогда этого не делаю и вам не советую. Это медленно, небезопасно, а с кривыми руками бывает больно. Если отбросить ситуацию, когда объект занят процессом, в большинстве случаев нужны права SYSTEM или Trusted Installer.

Запускайте с нужными правами сторонний файловый менеджер или на худой конец блокнот.

Выполнение скриптов от имени системы возможно без сторонних средств. Актуальная подборка утилит для запуска от имени SYSTEM и Trusted Installer давно есть в блоге. Да, статья про управление правами на разделы реестра, но практической разницы с разрешениями файловой системы тут нет.

В неординарных случаях со сложными ACL могут понадобиться icacls или subinacl. И да, про это написано в KB320081.

Заключение

Смешались в кучу кони, люди © Легаси и нововведения в ОС, работа с файловой системой напрямую и Linux, права SYSTEM или TI, и даже кривые ACL. Неудивительно, что применяемое лекарство зависит от заболевания.

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

Об авторе

Вадим — владелец этого блога, и почти все записи здесь вышли из-под его пера. Подробности о блоге и авторе здесь. Поддержать автора вы можете тут.

Вас также может заинтересовать:

Я в Telegram

Подпишитесь на канал и читайте интересные записи чаще! Есть вопросы? Задайте их в чате.

комментариев 19

Kesantielu Dasefern

После удаления программ Adobe замечал, что иногда невозможно удалить пустую папку из-под них в Program Files. Все права есть, папку никто не использует, однако удалить не получается, а переименовать — без проблем. После перезагрузки ничего не меняется. Удалить получилось только из-под WSL

Ваша оценка: Thumb upThumb down0

Кмк кто-то писал в чате инсайдеров, может и вы. ОК, WSL тоже вариант 🙂

Ваша оценка: Thumb upThumb down0

Вчера папка не удалялась, была ошибка «Папка не пуста». Всё перепробовал, но помогла одна программа — Blank And Secure. Удалил таки (перезаписал скорее), но даже не с первого раза.

Ваша оценка: Thumb upThumb down0

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

Ваша оценка: Thumb upThumb down0

Проверил в FAR файл с финишным пробелом и папку с двоеточием. Проблем нет. При попытке удалить через F8, ругается «Не удалось переместить в корзину. Не удается удалить указанный файл», но если в этом диалоговом окне выбрать «Удалить», удаление происходит штатно. Если сразу выбрать удаление мимо корзины. у меня повешено на Shift+Del, вообще без проблем.
У кого есть Total Commander, проверьте пожалуйста в нём.

Ваша оценка: Thumb upThumb down0

+1
Всю жизнь удалял проблемные файлы и папки FARом Shift+Del, ни разу вопросов не возникало.

Ваша оценка: Thumb upThumb down0

удалить не удаляемое — берём утилиту для запуска процессов с правами TI.
например https://github.com/mspaintmsi/superUser/releases

Ваша оценка: Thumb upThumb down0

Звучит как панацея, но нет — это поможет только если дело в правах TI. А так, этих утилит вагон и маленькая тележка, ссылка в статье. Ну и кавычек в пути не хватает 🙂

Ваша оценка: Thumb upThumb down0

Помню были проблемы с документами по длинному пути. Что-то вроде год\контрагент\договор\версия и так далее.
Решилось переименовыванием папок высшего уровня в г\контр\дог\вер\ и т.п. 🙂

Ваша оценка: Thumb upThumb down0

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

Ваша оценка: Thumb upThumb down0

метод с архиватором на самом деле самый рабочий. бывали файлы, которые не удалить через cmd никак.

Ваша оценка: Thumb upThumb down0

Как удалить файл или папку при недостатке прав

Или можно установить reg скрипт take ownership с tenforums, в два клика продавить права и спокойно удалить нужное.

Ваша оценка: Thumb upThumb down0

Свое мнение по этому методу я изложил в статье.

Ваша оценка: Thumb upThumb down0

Владислав Балякин

Мне в таких случаях помогала виндусятская проверка диска на ошибки

Ваша оценка: Thumb upThumb down0

Не совсем по теме.
Удалял повредившиеся ветки реестра с помощью обычного дистрибутива Windows из PE.
Их не могла прочитать LicenseManager, а права на них поменять не получалось.
После удаления веток они пересоздались службой автоматически.
Проблемные ветки нашёл с помощью Process Monitor.

Ваша оценка: Thumb upThumb down0

Удалить «неудаляемое», например, старую папку Windows, можно следующим образом:
открываем командную строку с правами администратора,
выполняем две команды:
takeown /f «D:\windows» /r
icacls «D:\windows» /reset /T

после этого просто удаляем… папку Windows (естественно на диске D:, т.е., в нашем примере, старую)

Ваша оценка: Thumb upThumb down0

Джонни

Часто работаю с приложением для синхронизации папок с облаком Bitrix24. Там какая то штука что файл базы данных с кэшем не удаляется даже если закрыть программу. Помогает только перезагрузка. Там дело не в имени файла, а в том что файл остаётся «открытым на запись» кажется толи системой толи эксплорером, но как снять этот флаг с него без перезагрузки — хз.

Ваша оценка: Thumb upThumb down0
Ваша оценка: Thumb upThumb down0

Недавно отключил OneDrive, чтобы данных не осталось. Но остался один файл.
Пробовал удалять найденными командами (из под админа, конечно). И из powerShell, и из cmd. Проверки диска и OS запускал. Компьютер перезагружал. Не помогало.
Ошибка была странная.
Нашёл такое решение: создать файл с таким же именем, перезаписать им неудаляемый файл, после чего удалить.
Помогло. 🙂

Ваша оценка: Thumb upThumb down0

Как удалить файл с длиной пути более 260 символов

date03.03.2021
useritpro
directoryWindows 8
commentsкомментария 3

Не секрет, что проводник Windows, как и большинство других Windows-приложений, включая PowerShell, не умеют работать с объектами файловой системы с глубокой вложенностью папок, длина пути к которым превышает 260 символов. Причем это ограничение существует только на уровне приложений, а сама файловая система NTFS поддерживает пути к файлам вплоть до 32767 символов.

Данное ограничение наложено библиотекой Win32 API, а которой максимальная длина пути составляет 260 символов (MAX_PATH=260). В общем случае путь формируется из следующих элементов: [C:\]+[путь_из_256_символов]+[<NUL>], причем максимальная длина одного каталога/файла в NTFS — 255 символов в Unicode. При использовании юникодных функций API, возможно использовать путь до 32767 символов. Благодаря этому многие сторонние программы (те же популярные файловые менеджеры, например FAR и Total Commander) без каких-либо трудностей обрабатывает файлы/папки, длина пути к которым превышает 260 символов.

Это ограничение также не действует при сетевом доступе пользователей к файлам по протоколу SMB (за счет этого каталожные структуры с длинными путями нередкость именно на файловых серверах с пользовательскими данными). Администратор, обслуживающий данный сервер не может через стандартный интерфейс проводника Windows Explorer управлять (удалять/перемещать) файлы с длинными путями. При попытке создать/скопировать файл в такой каталог, появляется ошибка:

Ограничение на длину пути в Windows

Другие программы/диалоговые окна могут сообщать о наличии ограничения по своему.

Согласитесь забавно, что за окном 2014 год, а мы до сих пор говорим об ограничении в 260 символов на максимальную длину пути в Windows… Но похоже в ближайшее время никаких кардинальных изменений не предвидится, и даже в совсем свежей Windows 10 Technical Preview это ограничение все еще существует.

В этой статье мы покажем, как в Windows можно работать с файлами, путь к которым превышает 260 символов. В данном кейсе наша задача – удалить каталог, содержащий файлы с большой длиной пути.

При попытке удалить такой каталог из проводника появляется ошибка:

Ошибка удаления файла с большой длиной пути

Powershell также не умеет корректно обрабатывать каталоги и файлы с большими путями, превышающими 260 символов. При попытке удалить каталог с такими файлами (C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath) появляется ошибка:

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260

Ошибка при удалении каталога с помощью командлета Powershell Remove-Item

+ CategoryInfo : WriteError: (C:\Install\MS S. it\verylongpath:String) [Remove-Item], PathTooLongExcepti
on
+ FullyQualifiedErrorId : RemoveItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

Самый простой вариант (он, собственно, и предлагается в окне с ошибкой) – сократить название родительских папок, уменьшив общую длину пути (но применимо не всегда).

Другой вариант – создать символическую ссылку на часть пути, укоротив тем самым общую длину пути:

Далее файловые операции проводить с каталогом, на который назначена символьная ссылка.

Еще один вариант, напоминающий работу с символьной ссылкой — сопоставить проблемную папку виртуальному диску (в нашем примере X: ), тем самым также сократив длину пути:

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

Но лично мне больше всего для задачи удаления данных в таких ситуациях нравится возможности robocopy.exe, которая поддерживает работу с длинными путями.

С помощью опции /MIR, утилита robocopy может создать полную копию (зеркало) исходного каталога в целевом. И, если исходная папка пустая, все данные в целевой папке также очищаются. Создадим пустую папку C:\Install\test и с помощью аргумента /MIR выполним копирование содержимое тестовой папки в целевую (если имя папки содержит пробелы или кириллические символы, путь нужно взять в кавычки).

robocopy /mir - создаем зеркало пустого каталогаrobocopy /MIR

После выполнения команды содержимое каталога C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath очищается (заменятся содержимым пустого каталога).

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

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

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

Слишком длинный путь к источнику.
Файловая система не поддерживает такие длинные имена исходных файлов. Попробуйте перенести файл в папку с меньшей длинной пути или укажите более короткое имя файла и повторите попытку.

Причина

По умолчанию, операционная система Windows настроена на блокирование действий над файлами в проводнике, путь к которым более 255 символов.

Решение

Способ 1. Уменьшаем путь до файла

Есть несколько способов сократить путь до нужной нам папки.

1. Переименовываем все папки, в которые вложен наш файл, на менее длинные названия. Когда путь сократится, можно выполнить удаление или перемещение.

2. Создаем символьную ссылку на конечный путь. Это можно сделать командой:

mklink /d c:\<короткий путь> c:\<длинный путь>

mklink /d "C:\Папка0" "C:\Папка\Папка 2\Папка 3\ Папка 4\Папка 5"

* в данном примере перейдя по пути C:\Папка0, мы окажемся в папке C:\Папка\Папка 2\Папка 3\ Папка 4\Папка 5.

3. Сопоставляем папку букве диска с помощью команды subst:

subst S: "C:\Папка\Папка 2\Папка 3\ Папка 4\Папка 5"

* в данном примере мы создадим диск S, который будет вести нас в папку C:\Папка\Папка 2\Папка 3\ Папка 4\Папка 5.

Способ 2. Включаем поддержку длинных файлов

Данный способ поддерживается, начиная с Windows 10 / Server 2016.

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

Открываем реестр (команда regedit) и переходим по пути HKLM\SYSTEM\CurrentControlSet\Control\FileSystem. Находим или создаем ключ LongPathsEnabled с типом REG_DWORD и задаем ему значение 1.

Это же действие из командной строки:

reg delete "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /f

reg add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1

* первая команда, на всякий случай, удалит старый параметр (если его нет, команда вернет ошибку). Вторая — создаст нужный нам ключ.

Способ 3. Far Manager

Устанавливаем программу Far Manager — переходим в нужный каталог и выполняем нужные действия над файлами.

Иногда, данный способ работает только после того, как мы включили поддержку длинных имен (способ 2).

Способ 4. Укорачиваем сетевой путь

Настраиваем сетевой доступ к папке и подключаем ее как сетевой диск. Путь станет меньше.

Например, это можно сделать командой:

net use J: \\server\share /persistent:yes

* данной командой мы создадим диск J, который будет вести на сетевую папку \\server\share.

Способ 5. Используем командную строку

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

xcopy <длинный путь до файла> <короткий путь>

move <длинный путь до файла> <короткий путь>

В чем была проблема?

Если вам удалось решить проблему, поделитесь своим опытом для других. Что помогло:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *