2009-02-15 3 views
58

При импорте проекта в eclipse он каким-то образом начал создавать рекурсивные версии каталога.Как удалить длинный путь в окнах.

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

Я не могу удалить его из командной оболочки. Я не могу удалить его из проводника. Я ничего не могу с этим сделать. Я не знаю, сколько копий этого Eclipse создано. Затмение бежало, как минута, прежде чем я понял, что что-то не так, и я отменил операцию.

Я могу получить свойства папки верхнего уровня, и он говорит, что содержит 497 папок.

Вопрос 1: как я могу удалить все это в Windows?

Вопрос 2: Какого черта думали о затмении?

+0

Запуск щедрости, надеющейся на лучшее/более быстрое/быстрое решение. В качестве альтернативы, кто-то исправляет затмение, чтобы он распознал тупиковую рекурсивную операцию копирования. –

+3

http://technet.microsoft.com/en-us/sysinternals/bb896768 и сопоставьте некоторые более глубокие папки где-то в другом месте. В качестве альтернативы напишите 4-строчную функцию в java и удалите ее; \t 'статической силы cleanDir (реж файла) { \t \t для (Файл F: dir.listFiles()) { \t \t \t если (ф.isDirectory()) { \t \t \t \t cleanDir (f); \t \t \t \t \t \t f.delete(); \t \t} \t \t \t} '... который напоминает задачу муравья, может также работать? – bestsss

+0

Вы пытались удалить его из кода? –

ответ

19

У меня возникла проблема с Eclipse: при попытке импортировать проект с использованием Subclipse он создал глубоко вложенный набор каталогов, которые я не смог удалить.

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

Решения @Charlie и @ Tomalek выглядят так, как будто они могут быть более элегантными. Я не планирую повторять опыт, чтобы узнать об этом.

+0

Это может быть самым неэлегантным, но я пробовал все остальное. Прошло несколько минут, но он решил это. И это именно то, что случилось со мной. , . Я думаю, что делал импорт -> SVN -> checkout. Я не собираюсь пытаться воспроизвести его, чтобы быть уверенным, хотя. – Baltimark

+0

Рад, что мой опыт был полезен для вас :-) –

+0

Я бы не использовать его. Практически, я должен сначала проверить, есть ли 5 ​​файлов с такими длинными именами 500. Лучше иметь дело с такими проблемами, используя либо командную строку, либо такой инструмент, как 7-Zip File Manager. – Swanidhi

12

Как Q1)

Использование Подст для короткого cirquit пути:

subst Q: C:\very\long\path\created\by\eclipse 
Q: 
del *.* 

Как к Q2)

Длинные пути являются менее проблемы в других операционных системах, и есть Функции API Windows могут иметь дело с дорожками длиной более 255 символов, поэтому они просто сделали это, я думаю.

+1

список моих каталогов. , , dirname -> dirname -> dirname ->. , , около 500 раз. Я могу перенаправить «q» на любую его часть, но когда я пытаюсь удалить «q», у нее такая же проблема. – Baltimark

+1

Далее продолжим следующую букву диска. Посмотрите здесь: http://stackoverflow.com/questions/236533/ – Tomalak

+0

Ok tomalak, вы говорите, чтобы продолжать добавлять буквы дисков, пока я не получу путь, достаточно короткий для удаления, а затем «удалить снизу», если вы , Аналогичная идея для Ян. Возможно, будет более эффективным, по времени. Благодарю. – Baltimark

-2

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

+1

Но этот инструмент просто удаляет эксклюзивные замки на файлы. Это не поможет, если путь к файлу слишком длинный. – Tomalak

+1

Справа. Не помогает. – Baltimark

+0

Используйте диспетчер файлов 7Zip. Работает как шарм. – Swanidhi

10

Если вам нужно иметь дело с путями длиной более MAX_PATH, вам придется использовать Unicode-версии API-интерфейсов Windows (например, DeleteFileW) и использовать префикс \\? \. Вы можете написать короткую программу, используя эти API, чтобы перечислить эти каталоги и удалить их.

+0

Внимание: Если вы используете \\? \, Вам нужно знать, какой тип файловой системы находится на установленном томе. (например, вам нужно знать, является ли символ «/» или «\» символом разделителя.) Документы WinAPI говорят: «Для ввода-вывода файлов префикс« \\? \ »для строки пути указывает, что Windows API отключить весь синтаксический анализ строк и отправку строки, следующей за ней, прямо в файловую систему. (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx) –

4

Я столкнулся с такой же проблемой, используя eclipse ..! вложенные папки zillion созданы, и это заняло более 500 МБ пространства !!!!

я попытался тонну вещей в окнах и ничего не получалось ..

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

+2

+1 Я также хотел подчеркнуть для пользователей, не знакомых с вариантами Linux. Вам не нужна установленная копия Ubuntu, чтобы запустить ее для простой задачи, подобной этой. Вы можете легко загрузить версию LiveCD и загрузить ОС с диска. –

154
robocopy empty_dir base_nested_dir /purge 

Пример: Если у вас есть путь к папке, это слишком долго, такие как:

D:\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles\BackupFolder\Copy\MyFiles

следовать этим инструкциям, чтобы удалить его.

  1. Создайте пустую папку, например C:\Users\Name\Desktop\temp.
  2. Откройте окно командной строки.
  3. Тип robocopy C:\Users\Name\Desktop\temp D:\BackupFolder /purge

Примечание: Если есть пробелы в любом пути в шаге 3, путь должен быть Запертый в кавычки.

+1

Это приятно, потому что вам не нужно вручную переименовывать вещи или загружать дополнительные инструменты. Просто создайте пустой каталог и скажите robocopy, чтобы очистить все в целевом каталоге, который не находится в пустом каталоге. Handy. – quillbreaker

+0

Иногда вам нужно выполнить шаг 3 более одного раза, чтобы фактически удалить все файлы и директории из целевого каталога. –

+0

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

6

Исправление является простым и бесплатным! Не нужно вообще переименовывать папки.

  1. Скачать бесплатно Cygwin.

  2. используйте команду rm -f -r <folder-name> и подождите несколько минут.

У меня была папка размером 1,5 ГБ с многочисленными внутренними папками, и это сработало!

3

Программно вы можете удалить их с помощью DeleteFileW и RemoveDirectoryW и добавить L"\\?\" к названиям файлов. Обратите внимание, что вам нужно использовать версию W, а не версию API.

+1

Я написал небольшой инструмент на основе DeleteFileW специально по этой причине. Он находится по адресу https://github.com/marceln/SuperDelete. –

1

Lol У меня была аналогичная проблема несколько лет назад. Из-за ошибки я создал неопределенное вложенность папок, пока имя файла не затянется слишком долго.

IIRC, я удалил их программным путем, просканировав структуру папок.

4

Способ, упомянутый в this Windows Sysinternals forum post by maxaha1.

Предлагаю вам работать сверху вниз. До тех пор, пока вы останетесь в том же томе (share), вы обычно можете перетаскивать каталоги верхнего уровня в новых родителей, невзирая на то, что содержимое каталога перетаскивается (то есть, и проблемы с длиной/рекурсией, которые могут иметь место). Итак, вы берете каталог, возможно, 4 или 5 уровней по вашему пути к проблеме, а перетащите его в корень. Затем удалите исходный путь, который теперь только содержит несколько уровней. В идеале, работайте, чтобы сохранить самый длинный путь до менее , чем 250 символов (включая имена файлов). Я делаю миграцию системы на момент, и у нас есть некоторые пользователи с более чем 340 дорожками char, которые не копируют без этого метода. Я попытался Подст-х, рекурсивный чистое использование Женского, рекурсивных скриптов, и т.д .. К сожалению, пользователи, кажется, чтобы иметь возможность создавать вещи, которые одурманение лучших кодеров, админы и т.д ..

создавать новые папки и просто перетащить -and-drop, несколько папок вниз сверху (и удалять их), пока вы не очистите их.

+0

FileUtils.deleteDirectory ("C: \\ My \\ Stupid \\ Path \\"); Если вы хотите использовать утилиты файлов Apache Commons и запустить быструю java-программу. – Zoidberg

+0

Интересная идея и престиж для официального благо, но это ужасно ручно и требует много времени, по сравнению со многими другими сторонниками. – Barett

4

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

http://www.osmstudios.com/Display.asp?Page=pathtoolong

Который, вероятно, использует 3 строки Java от дальнейшего до этой темы.

-FM

+0

Я написал это, и это именно то, что он использует. –

+0

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

+0

7Zip Файловый менеджер имеет право использовать. Откройте файл с помощью диспетчера файлов 7Zip и Shift + Удалите файл. Мой комментарий 1-й по предыдущим 3 ответам. – Swanidhi

-1

Вы можете использовать "Cygwin" с помощью команды "гт --force --recursive PATH" или "короткий погонных -fr PATH".

+2

downvoted, потому что это дублированный ответ (поиск «Cygwin» на странице) – user

81

7Zip - идеальное решение, если вам не удобно с командной строкой.

  1. Открытый 7Zip файловый менеджер
  2. Перейдите к файлу
  3. Shift-Delete файл

Ура!

+0

@ lnaie Я думаю, что мое решение быстрее всего. Не уверен, почему я получил голосование, даже если кто-то даже не пытался. – Swanidhi

+2

Я получил каталог не пустым ... так же, как rimraf – Oliver

+0

@Oliver вы можете удалить полное дерево каталогов с помощью 7zip. :) – Swanidhi

3

Кто-то выше уже разместил ссылку на «rimraf», но позвольте мне добавить более подробную информацию. Если у вас установлен Node в вашей системе, просто используйте модуль rimraf (его можно установить на вашем пути). Это, безусловно, самый простой способ удалить вещи в системе Windows в самых нетривиальных случаях. Это не так, что rimraf является удивительным, на самом деле, это потому, что Node.js обрабатывает файловые системы на уровне ядра устройства. Если вы посмотрите на исходный код модуля fs для узла, вы увидите код, например this. По сути, Node.js обрабатывает файловые системы намного лучше, чем Git для Windows, т. Е. Существует ошибка с использованием git clean -fdx в Windows, которая не удаляет папки с длинными именами путей.

1

Я был не очень доволен решением, размещенным здесь и в других местах (robocopy, 7zip, subst, shady spyware), поэтому я развернул собственный инструмент небольшой командной строки.

Он может рекурсивно удалять файл или весь каталог. Возможно, в будущем я добавлю больше вариантов.

Инструмент называется SuperDelete, и вы можете получить его у releases page page GitHub.

1

Хорошо, я попытался найти решение для этого, и я нашел один из самого простого решения для пользователей окон

  1. Установите Mobaxterm
  2. Открыть mobaxterm. Перейдите в каталог, который вы хотите удалить (с помощью CD) и выполните следующую команду

    ет -rf имя_каталог

Всех папок, вложенные папки, окно которых сетовали об удалении теперь будут удалены

0

Его довольно раздражает то, что в 2016 году это все еще представляет нам Windows-пользователей проблему, когда Linux решила эти годы назад. Это становится еще более раздражающим, когда его легко сделать на Java.

Мы должны использовать Change.org для подачи заявки MS, чтобы включить эту возможность. Это не сложно.Если они обеспокоены обратной совместимостью, почему бы просто не использовать режим Strict, который администраторы могут включать или выключать. По крайней мере, дайте нам предупреждение, но затем позвольте нам удалить его в любом случае. Grrrrr [/ декламация]

Если вы работаете в Java на вашей машине, вы можете найти этот код полезным:

import java.io.File; 

public class Delong { 

    public static void main(String[] args) { 
     File file = new File("F:\\YourDirectory\\YourFile"); 
     boolean result = deleteDirectory(file); 

     if(result) 
      System.out.println("Deleted"); 
     else 
      System.out.println("Failed"); 
    }//end main 

    /** 
    * Force deletion of directory 
    * @param path The path you want to delete 
    * @return True if it worked; 
    */ 
    static public boolean deleteDirectory(File path) { 
     if (path.exists()) { 
      File[] files = path.listFiles(); 
      for (int x = 0; x < files.length; x++) { 
       if (files[x].isDirectory()) 
        deleteDirectory(files[x]); 
       else 
        files[x].delete(); 
      }//end for 
     }///end if 
     return (path.delete()); 
    }//endDeleteDirectory 

}//end class 
-1

Если у вас уже есть git установлены на вашей системе, то простым способом удаления папки с все его содержимое, чтобы открыть окно gitbash, а затем запустите эту команду.

$ rm -rf DeleteFolderName

+0

Это не работает. – Brad

1

MIR (зеркало полное дерево каталогов) вариант работал для меня в окнах и окно сетевых путей, а также ..

robocopy empty_dir <foldertobedeleted> /MIR

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

выход будет, как это ..

enter image description here>

Смежные вопросы