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

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

8 ответов

Когда вы хотите полностью удалить каталог, и он содержит длинные пути, robocopy делает очень хорошую работу:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

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

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

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

dir /X

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

del LONGF~1.txt

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

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

так что у вас есть c:\some\long\path...\ и \foo\bar\folder \oldfiles\myoldfile.txt.

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

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

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

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

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

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

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

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

\\. \ C: \ некоторый каталог \ другой каталог \ файл с длинным именем

Самый простой способ, который я нашел, это загрузиться с живого CD с Ubuntu.

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

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

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

Наверное, не самый лучший способ, и мне интересно посмотреть, что придут другие -

У меня было это однажды, и я попробовал несколько вещей без какой-либо удачи. Вместо того, чтобы искать хороший инструмент, я перезапустил диск Windows, зашел в консоль восстановления и просто удалил ее оттуда. Работал первый раз и действительно хорошо!

Кроме того, только что сделал Google для вас и нашел это - DelinvFile выглядит хорошо, но не могу ручаться за это.

Редактировать - Предупреждение, только что увиденное выше - всего лишь пробная версия - Может быть, не так хорошо, как я думал!

Другие вопросы по тегам