Как я удаляю папку, которая вкладывается довольно глубоко, и избегайте “Имени файла слишком долго”?

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

dir1\dir1\dir1\dir1\...

Я не могу удалить эту папку в Windows с помощью Проводника, del или rmdir команды, ни команда 'комнаты' Cygwin. Как я должен удалить эту очень длинную папку?

Это просто продолжает говорить "Имя файла слишком долго..."

70
задан 10.05.2017, 17:24

7 ответов

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

-3
ответ дан 07.12.2019, 08:11

Откройте командную строку.

Перейдите к папке/каталогу, которая содержит самый высокий 'dir1' (мы примем C:\),

c:\> RD /s dir1

Редактирование (после того, как добавленные комментарии):

Другие идеи:

MS предлагает информацию о том, как иметь дело с проблемой (много идей попробовать) здесь.

Существует также этот инструмент (никогда не использовал его лично) - TooLongPath.

Возможно, запишите что-то (так как у Вас есть Eclipse), который перешел полностью в и затем отступает один уровень папки за один раз, удаляя, когда он идет?

1
ответ дан 07.12.2019, 08:11

Если это - сетевая папка, затем просто совместно используют родительский каталог того каталога и отображают его на диск на Вашей локальной машине и затем удаляют Вашу папку.

1
ответ дан 07.12.2019, 08:11

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

2
ответ дан 07.12.2019, 08:11

Я попытался бы открыть командную строку и работать:

rmdir /s <directory>

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

1
ответ дан 07.12.2019, 08:11

Это на самом деле довольно просто зафиксировать. Скажите, что структура каталогов как такова:

C:\Dir1\Dir1\Dir1\Dir1…

Для фиксации его просто переименуйте каждую папку к имени папки с одним символом, пока это больше не будет слишком длинно для удаления:

  1. Переименовать C:\Dir1 кому: C:\D
  2. Перейдите к C:\D\
  3. Переименовать C:\D\Dir1 кому: C:\D\D
  4. Перейдите к C:\D\D\
  5. Goto 1 до общей длины пути <260

Вот пакетный файл для автоматизации процесса (эта простая версия является лучшей для простых каталогов как тот, описанный в вопросе, специально для доступных). Передайте его самая высокая возможная папка (например, C:\Dir1 для C:\Dir1\Dir1\Dir1… или C:\Users\Bob\Desktop\New Folderдля C:\Users\Bob\Desktop\New Folder\abcdefghi…)

@echo off
if not (%1)==() cd %1
for /D %%i in (*) do if not %%i==_ ren "%%i" _
pushd _ 
%0 
popd

Техническое объяснение

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

Когда Вы пытаетесь получить доступ к каталогу, Вы делаете настолько использующий его полный путь или явно или нет, который включает все, что прибыло перед ним. Поэтому для структуры каталогов как C:\Dir1\Dir1\Dir1\Dir1, длина пути к самому внутреннему Dir1 22. Однако длина пути к наиболее удаленному Dir1 только 7 и поэтому все еще доступны независимо от его содержания (в контексте пути данного каталога, файловая система не знает о том, что это содержит или эффект, который это имеет на общую длину пути своих дочерних каталогов; только его каталоги предка — Вы не можете переименовать каталог, если общая длина пути будет слишком длинной).

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

Противоположное верно также. Вы не можете создать путь, который больше, чем максимальная поддерживаемая длина (на DOS и Windows, MAX_PATH = 260). Однако можно переименовать каталоги, работающие от самого внутреннего исходящего, к более длинному имени. Результат состоит в том, что более глубокие папки, полный путь которых> 260, будут недоступны. (Который не делает их “скрытыми” или безопасными, так как они достаточно просты достигнуть, не используйте этот метод для сокрытия файлов.)


Интересное примечание стороны

При создании папок в Windows 7 Explorer может казаться, что Проводник позволяет Вам создавать подкаталоги, таким образом, что общая длина дольше, чем MAX_PATH, и в действительности это, однако это на самом деле обманывает при помощи “имен файлов DOS 8.3”. Вы видите это путем создания дерева, такого как следующее:

C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
   \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
    \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
     \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
      \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
       \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
        \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
         \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
          \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
           \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
            \abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\

Это - 696 символов в длину, который, конечно, является намного, чем 260. Далее, если Вы перешли к самому внутреннему подкаталогу в Проводнике, он показывает его как ожидалось в строке поиска, когда это не находится в фокусе, но когда Вы нажимаете в строке поиска, он изменяет путь к C:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\, который является только 102 символами долго.

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

То, что действительно было бы интересно, должно узнать, как дескрипторы Windows 7 Explorer “слишком долго соединяют каналом” когда NtfsDisable8dot3NameCreation опция установлена.

39
ответ дан 07.12.2019, 08:11

Я записал маленькое приложение C#, чтобы помочь мне удалить подобную очень глубинную структуру, сгенерированную небрежным использованием Robocopy и резервного копирования от Homeserver; по умолчанию Robocopy рассматривает совместные точки как регулярные папки... :-( Вы могли бы закончить с большой путаницей без того, чтобы замечать его.

Инструмент доступен в CodePlex с исходными файлами, чтобы любой использовал.

http://deepremove.codeplex.com

10
ответ дан 07.12.2019, 08:11

Если вы, как и я, не хотите устанавливать дополнительное программное обеспечение для исправления такой проблемы, я бы использовал предложение XQYZ и использовал robocopy для решения этой проблемы. (В моем случае проблема была создана робокопией, в первую очередь, путем копирования каталога, в котором были рекурсивные точки соединения, без поставки /XJ в робокопию).

Удалить дерево каталогов, начиная с c:\subdir\more\offending_dir:

Общий пошаговый процесс так же прост:

  1. cd c:\subdir\more, чтобы cd попал в родительский каталог.
  2. mkdir empty для создания пустой директории.
  3. robocopy empty offending_dir /mir для зеркалирования пустой директории в директорию offending.
  4. После некоторого ожидания вы закончили! Заканчивайте с:
  5. rmdir offending_dir, чтобы избавиться от теперь пустой директории offending и
  6. rmdir empty, чтобы избавиться от промежуточной пустой директории.
105
ответ дан 07.12.2019, 08:11

Когда у меня возникает эта проблема, я просто переименовываю некоторые имена папок намного короче, затем, когда общий путь достаточно короткий, он удаляет OK. Никаких дополнительных инструментов не требуется.

0
ответ дан 07.12.2019, 08:11

Теги

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