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

    

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

    

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

195 голосов | спросил user3048 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 23 Sep 2009 19:56:39 +0400 2009, 19:56:39

8 ответов


415

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

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

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

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

ответил Benoit 29 PM00000050000001631 2012, 17:38:16
89

В командной строке:

  dir /X
 

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

  del LONGF ~ 1.txt
 
ответил Will Eddins 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 23 Sep 2009 20:01:40 +0400 2009, 20:01:40
51

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

ответил joeqwerty 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 23 Sep 2009 21:40:55 +0400 2009, 21:40:55
13

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

 \\. \ C: \ some directory \ other directory \ файл с длинным именем 
ответил grawity 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 23 Sep 2009 20:12:29 +0400 2009, 20:12:29
13

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

, поэтому у вас есть c: \ some \ long \ path ... \ и \ 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» означает, что это не выдержит следующую перезагрузку и смущает вас позже. Не забудьте отключить папку, когда закончите.)

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

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

ответил AdamV 21 FebruaryEurope/MoscowbTue, 21 Feb 2012 21:18:15 +0400000000pmTue, 21 Feb 2012 21:18:15 +040012 2012, 21:18:15
9

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

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

ответил Col 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 23 Sep 2009 19:59:00 +0400 2009, 19:59:00
5

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

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

ответил Rook 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 23 Sep 2009 23:39:20 +0400 2009, 23:39:20
1

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

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

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

Изменить - Предупреждение, только что увиденное выше - это только пробная версия. Возможно, это не так хорошо, как я думал раньше.

ответил William Hilsum 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 23 Sep 2009 20:00:00 +0400 2009, 20:00:00

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132