Eclipse создал временную папку в одном из каталогов, который вкладывается довольно глубоко, например.
dir1\dir1\dir1\dir1\...
Я не могу удалить эту папку в Windows с помощью Проводника, del
или rmdir
команды, ни команда 'комнаты' Cygwin. Как я должен удалить эту очень длинную папку?
Это просто продолжает говорить "Имя файла слишком долго..."
Откройте командную строку.
Перейдите к папке/каталогу, которая содержит самый высокий 'dir1' (мы примем C:\),
c:\> RD /s dir1
Редактирование (после того, как добавленные комментарии):
Другие идеи:
MS предлагает информацию о том, как иметь дело с проблемой (много идей попробовать) здесь.
Существует также этот инструмент (никогда не использовал его лично) - TooLongPath.
Возможно, запишите что-то (так как у Вас есть Eclipse), который перешел полностью в и затем отступает один уровень папки за один раз, удаляя, когда он идет?
Это на самом деле довольно просто зафиксировать. Скажите, что структура каталогов как такова:
C:\Dir1\Dir1\Dir1\Dir1…
Для фиксации его просто переименуйте каждую папку к имени папки с одним символом, пока это больше не будет слишком длинно для удаления:
C:\Dir1
кому: C:\D
C:\D\
C:\D\Dir1
кому: C:\D\D
C:\D\D\
Вот пакетный файл для автоматизации процесса (эта простая версия является лучшей для простых каталогов как тот, описанный в вопросе, специально для доступных). Передайте его самая высокая возможная папка (например, 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
опция установлена.
Я записал маленькое приложение C#, чтобы помочь мне удалить подобную очень глубинную структуру, сгенерированную небрежным использованием Robocopy и резервного копирования от Homeserver; по умолчанию Robocopy рассматривает совместные точки как регулярные папки... :-( Вы могли бы закончить с большой путаницей без того, чтобы замечать его.
Инструмент доступен в CodePlex с исходными файлами, чтобы любой использовал.
Если вы, как и я, не хотите устанавливать дополнительное программное обеспечение для исправления такой проблемы, я бы использовал предложение XQYZ и использовал robocopy
для решения этой проблемы. (В моем случае проблема была создана робокопией, в первую очередь, путем копирования каталога, в котором были рекурсивные точки соединения, без поставки /XJ в робокопию).
Удалить дерево каталогов, начиная с c:\subdir\more\offending_dir:
Общий пошаговый процесс так же прост:
cd c:\subdir\more
, чтобы cd попал в родительский каталог. mkdir empty
для создания пустой директории.robocopy empty offending_dir /mir
для зеркалирования пустой директории в директорию offending.rmdir offending_dir
, чтобы избавиться от теперь пустой директории offending иrmdir empty
, чтобы избавиться от промежуточной пустой директории.Когда у меня возникает эта проблема, я просто переименовываю некоторые имена папок намного короче, затем, когда общий путь достаточно короткий, он удаляет OK. Никаких дополнительных инструментов не требуется.