Похоже, что Windows пытается ограничить имена файлов при удалении, хотя это не помешает созданию этих файлов.
Наш процесс сборки создает несколько временных файлов (многие из которых основаны на WSDL), которые выходят за пределы этого ограничения. Наш скрипт ant каким-то образом может удалить их при выполнении очистки, но иногда мне нужно удалить каталог workarea (куда идут все временные файлы), фактически не выполняя полную очистку от ant.
Это те же ошибки, что и в этом вопросе , но ответы на них на самом деле не работают для меня, поскольку я имею дело с каталогом, а не с файлом, и я не всегда знаю, какие именно файлы или подкаталоги вызывают проблему. И я пытаюсь избежать любого ручного процесса (кроме запуска одной команды), чтобы фактически удалить их.
Если я пытаюсь удалить каталог из Проводника, я получаю сообщение об ошибке
Cannot delete [file name]: The file name you specified is not valid or too long.
Specify a different file name
Попытка Remove-Item
в powershell выдает следующую ошибку:
Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item <<<< -force -Recurse <directory>
Кто-нибудь знает какие-либо инструменты или простые способы обойти эту ошибку удаления без необходимости вручную находить проблемные файлы и перемещать / переименовывать их?
источник
Ubuntu
или любой другой, которыйLinux Bootable CD
мы можем загрузить наш компьютерUbuntu
или любую другую ОС для временного. Затем мы можем выбрать папку, и мы можем легко удалить ее.Ответы:
Используйте 7-Zip File Manager, чтобы удалить их.
Если у вас все еще есть проблемы, убедитесь, что вы используете Shift+ Deleteв 7-Zip File Manager. В противном случае Windows попытается переместить их в корзину (что снова приведет к сбою).
источник
shift + Del
как сказал @cori. Если вы выберетеDelete
опцию из контекстного меню, она НЕ БУДЕТ там неудачной.shift + Del
Это!Ни один из других (бесплатных) ответов здесь не работал для меня, но я нашел один на другом сайте:
rimraf - это пакет Node.js , поэтому вам необходимо установить Node.js, включающий npm . Тогда вы можете запустить:
Затем вы можете запустить
rimraf
из командной строки.Я нашел это решение, потому что сам npm вызывал эту проблему из-за того, как он вкладывает зависимости.
Кстати,
rimraf
получает свое имя от команды UNIXrm -rf
, которая рекурсивно удаляет файлы и папки.источник
Для решения этой проблемы нет необходимости устанавливать какую-либо программу .
Эта проблема легко решается с помощью
robocopy
предустановленной версии Windows Vista, выпущенной в 2006 году.Например,
rmdir /S /Q <dir>
сообщалось о сбое в некоторых случаях. Нет необходимости использовать 7zip или любой другой сторонний инструмент. Powershell - это излишество. Cygwin может работать, но вы можете не установить его. Итак, давайте сосредоточимся наrobocopy
Идея состоит в том, чтобы
robocopy
для копирования + обновленоПосле выполнения
robocopy
целевой каталог также будет пустым.Эти инструкции для командной строки. Просто откройте поиск в Windows, введите
cmd
и нажмите Enter.Допустим, цель для удаления:
Мы действуем следующим образом:
Сначала создайте пустой каталог, fi
C:\emptyfolder
.Копировать + обновить из пустой директории до цели, используя опцию
/purge
Удалить пустой каталог. Тебе это больше не нужно.
Поскольку в исходном каталоге (
C:\emptyfolder
) нет файлов или папок , он простоC:\delete\this folder\with a very long name
рекурсивно удаляет файлы и папки в целевом каталоге ( )!Последний трюк: вы можете избежать написания от руки
Перетаскивая папку из окна проводника и опуская в окно терминала / cmd.
Будьте осторожны : удаленные файлы не попадут в корзину ! После удаления файлы не могут быть восстановлены.
(Взято из «Путь слишком длинный? Используйте Robocopy» от BVLANGEN )
PS: я понимаю, что этот ответ был здесь, менее дидактически. Как удалить файл в Windows со слишком длинным именем файла? [дубликат]
Бенуа добавил:
источник
Я считаю, что нашел способ удалить вещи из
cmd
. Первоначально я попробовалdel
команду, но это не сработало. Потом я вспомнилrmdir
. Делать следующее:похоже, сработало.
источник
Инструмент, который я использовал, когда у меня была эта проблема, был FastCopy . Я выбрал « Удалить все» из выпадающего списка, выбрал каталог, который хотел удалить, и нажал « Удалить все» .
FastCopy переносим (установка не требуется), и доступны 32-битные и 64-битные версии.
источник
Без установки дополнительного программного обеспечения вы можете использовать
subst
команду для временного создания псевдонима с длинным именем каталога.Например, если вы хотите удалить папку,
C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted
вы можете использовать командуа затем вы можете легко удалить
X:\folder to be deleted
в проводнике Windows или в командной строке. Чтобы удалить временный псевдоним диска, используйте командуисточник
Cygwin's
rm -rf
хорошо работает на длинных путях!источник
Просто перейдите из Powershell в команду, запустив ниже:
источник
Решение Dentrasi - это то, что сработало для меня лучше, но я хотел опубликовать конкретные шаги в ответе на высшем уровне.
источник
Есть две вещи, которые еще не упомянуты в существующих ответах.
Длинный путь префикса
Windows API имеет специальную функцию, которая поддерживает имена путей Unicode длиной до 32 тыс. Символов (каждый элемент длиной до 255 символов).
Это часто ошибочно называют UNC-именами, но это не так.
Префикс, используемый для указания API использовать длинные пути Unicode, выглядит
\\?\
так:Имена UNC обычно используются при обращении к путям на удаленных серверах в форме
\\servername\path name\file name
. Вы можете комбинировать это с префиксом длинного пути так:\\?\UNC\server\share
Обратите внимание, что некоторые плохо написанные, но, к сожалению, довольно распространенные приложения не поддерживают пути к файлам UNC и префикс длинных путей.
Ссылка: https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
Поддержка длинного пути
Эта опция была добавлена в последние версии Windows 10. На момент написания этой статьи она не была активирована по умолчанию, поскольку для нее требуется поддержка определенных приложений. Интересно, что PowerShell имеет встроенную поддержку, поэтому включение этой опции позволит использовать длинные пути непосредственно в сценариях PowerShell.
Вы можете активировать его через редактор групповой политики, если у вас есть версия Windows с этим. Или вы можете просто использовать следующее изменение реестра. Как всегда, пожалуйста, сделайте резервную копию раздела реестра, который вы меняете, прежде чем что-либо делать.
regedit.exe
.HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
LongPathsEnabled
.LongPathsEnabled
для1
включить.Любые приложения с соответствующими записями манифеста теперь будут иметь доступ к стандартным длинным путям POSIX. Это должно включать приложения Магазина Windows.
Ссылка: https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/
ОБНОВЛЕНИЕ 2017-04-09
@maoizm указал на проблему с разделом реестра выше, поэтому я немного покопался . Похоже, теперь вы можете установить поддержку длинных имен файлов с помощью системного ключа:
Это все еще работает только для приложений, которые специально настроены на его использование (требуется запись в manifest.xml приложения).
Вы должны также отметить, что вы не можете использовать относительные имена путей с этим методом.
источник
{48981759-12F2-42A6-A048-028B3973495F}Machine
часть пути к реестру будет отличаться на каждом компьютере - это может быть не очевидно для всехМне нравится решение CMD. Хотя я хочу поделиться другим обходным путем, который работает даже в обычном проводнике: попробуйте сократить имена родительских папок перед удалением: более короткие имена сократят путь. Скажем, у вас есть эта древовидная структура папки:
C: \
.. Проекты
.. .. Некоторые удивительные проекты весной 2014 года
.. .. .. Активность в парке в городе в пятницу
.. .. .. .. бла бла бла бла бла бла бла бла бла бла бла бла бла бла
.. .. .. .. .. Актуальные файлы с длинными именами тоже
В этом случае вы не можете удалить папки, вы не можете удалить или переименовать файлы ни. Если вы хотите удалить всю структуру папок или ее часть, вы можете временно переименовать родительские папки и сократить путь, а затем удалить папку. Имена могут быть просто буквами:
C: \
.. Проекты
.. .. Икс
.. .. .. у
.. .. .. .. з
.. .. .. .. .. Актуальные файлы с длинными именами тоже
В моем случае я просто хотел удалить всю папку со многими подпапками и файлами. Поэтому меня не заботили названия папок.
источник
7-почтовое решение прекрасно работает. Другой вариант, если у вас установлен git - открыть оболочку bash и использовать:
rm -f
(или
rm -rf
для папок)источник
Git Bash Here
Я предлагаю Total Commander (условно-бесплатная, но продолжает работать после пробного периода только с минимальным начальным экраном). Именно так я всегда решаю проблемы с слишком длинными именами файлов .
источник
chkdsk
следует ее решить.Вы также можете удалить их, используя их эквивалентное короткое имя.
dir /x
покажет вам их.источник
Я создал простую Java-программу, которая использует robocopy для удаления файлов. Баночка пригодна для использования. Для дополнительного вывода запустите его из строки cmd.
https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing
источник
Я попробовал все остальные ответы, но они не сработали (по крайней мере, для меня).
Я наткнулся на delinfile и работал довольно хорошо и довольно быстро!
Пробная версия ограничена 3 действиями / 15 днями, но ее можно использовать, если вы хотите удалить только несколько папок / файлов:
источник
Большие каталоги предназначены и для этой задачи.
Больше информации на CodeProject .
источник
Я столкнулся с этой проблемой в Windows 10 и нашел это простое решение.
источник
Получил идеальный ответ здесь (для файлов). Работает в Windows 10.
Смотрите также: https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath
Ни одного альтернативного ответа на 4 вопроса не хватило для моих нужд. Добро пожаловать в мир.
источник
Я наконец-то узнал, как это сделать с помощью Powershell. Вот инструкции, которым я следовал, чтобы заставить это работать на Windows 7:
Создайте новую папку с именем NTFSSecurity в папке C: \ Users \ XXXX \ Documents \ WindowsPowerShell \ Modules \ NTFSSecurity , где XXXX - ваше имя пользователя Windows. Пример: если мое имя пользователя было « aspnyc », новая папка будет C: \ Users \ aspnyc \ Documents \ WindowsPowerShell \ Modules \ NTFSSecurity .
Загрузите пакет модуля PowerShell для защиты файловой системы - он должен быть доступен в виде простого ZIP-файла.
источник
Я наконец-то узнал, как это сделать с помощью Powershell в Windows 10, где отдельные имена файлов были слишком длинными. Вот шаги, которые я следовал, чтобы заставить это работать на Windows 10:
источник
Если у вас установлен Bash на Ubuntu в Windows, вы можете перейти в родительский каталог в обычной командной строке и набрать:
Который запускает bash, рекурсивно удаляет каталог из linux, в котором нет ограничений на имя файла, а затем возвращается в обычную командную строку.
источник
Перейдите в каталог в WinRAR, выберите файл, нажмите F2, переименуйте файл на более короткое имя. Затем вы можете удалить файл, как обычно.
Источник: https://www.youtube.com/watch?v=qQTyTprFAOg.
источник