2009-09-23 15:56:39 +0000 2009-09-23 15:56:39 +0000
203
203

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

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

Ответы (8)

428
428
428
2012-08-29 13:38:16 +0000

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

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

Это работает, потому что робокопирование внутренне [ использует Unicode-зависимые версии Win32 функций, с \?Когда вы хотите полностью удалить каталог и он содержит длинные пути,robocopy` делает ОЧЕНЬ хорошую работу:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

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

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

91
91
91
2009-09-23 16:01:40 +0000

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

dir /X

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

del LONGF~1.txt
```.
53
53
53
2009-09-23 17:40:55 +0000

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

13
13
13
2009-09-23 16:12:29 +0000

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

\.\C:\some directory\other directory\a file with long name
13
13
13
2012-02-21 17:18:15 +0000

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

, так что у вас c:\some\long\path…\and\foo\bar\folders\oldfiles\myoldfile.txt.

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

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

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

и диск X: теперь указывает непосредственно на папку “folders” внутри этого ресурса, так что “x:\oldfiles\myoldfile.txt” теперь довольно короткий.

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

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

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

9
9
9
2009-09-23 15:59:00 +0000

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

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

5
5
5
2009-09-23 19:39:20 +0000

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

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

1
1
1
2009-09-23 16:00:00 +0000

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

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

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

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

Похожие вопросы

3
19
10
28
2