У читателя Александра подопечный юзер спросонья удалил важный файл из сетевой папки. Админ, заранее подстеливший соломку, успокоил беднягу и уверенно открыл вчерашние теневые копии. Файл там был, но в нагрузку с ним шли грабли.
[+] Сегодня в программе
Слишком длинный целевой путь или имя файла
Цитирую письмо:
При попытке восстановить я получил ошибку о том, что путь до файла слишком длинен, и ничего с ним сделать нельзя. Т.к. это копия vss переименовать\скопировать\переместить я его не смог. Бился целый день, но выхода так и не нашел.
И неудивительно, с таким-то путем! :)
\\localhost\D$\sales\0-Коммерческий отдел (общий ресурс-обмен)\Общий ресурс (тел., реестры,реквизиты)\КЛИЕНТЫ С 2014\Стратегия\Договор аренды с выкупом_Клиент_27.06.14\Вар дог._25% аванс_с выкупом_17.07.14 (Today, July 22, 2014, 3 hours ago)\3 вар_договор аренды с правом выкупа_6443-001 от 17.07.14.pdf
Графический интерфейс теневых копий выпилили только из Windows 8, а на серверной ОС он сохранился, и свойства папки выглядят аналогично Windows 7.
Снимок экрана любезно предоставил Вадимс Поданс
Как обойти ограничение на создание файла с длинным путем
Понятно, что восстановление [Restore] при таком длинном пути не сработает – ведь нужно скопировать файл в исходное расположение. Но я сходу не понял, почему возникли затруднения с копированием файла в любое другое место [Copy] – главное же было вернуть файл пользователю. Проводник же может скопировать файл из длинного пути.
Так или иначе, я получил письмо в метро, и поэтому с телефона по-быстрому отправил ответ, который должен был обойти препятствие. Я предложил создать символическую ссылку на часть пути:
mklink /d c:\link "\\localhost\D$\sales\0-Коммерческий отдел (общий ресурс-обмен)\Общий ресурс (тел., реестры,реквизиты)\"
Теперь копирование файла в C:\link должно было вернуть его на прежнее место. И это сработало :)
Такое решение пришло мне в голову не случайно – ведь вопрос был о теневых копиях, а я уже пару раз рассказывал, как войти в них с помощью символической ссылки. Позже, когда я готовил эту заметку и рылся в своей записной книжке, всплыло и другое решение, которым я делился три года назад.
subst V: "\\localhost\D$\sales\0-Коммерческий отдел (общий ресурс-обмен)\Общий ресурс (тел., реестры,реквизиты)\"
Команда subst сопоставляет папку букве диска, и при желании одной командой можно моментально занять все буквы! В принципе, если путь супер-длинный, это может пригодиться, т.к. придется создавать серию сопоставлений.
Эксперимент
Хотите проверить, как все выглядит на практике? Я подготовил для вас CMD-файл (скачать), этапы работы которого вы можете наблюдать в проводнике. Запускайте файл от имени администратора, иначе символическая ссылка не получится. Я проверял работу файла только в Windows 8.1, но он должен работать и в предыдущих ОС.
Код командного файла для экспериментов
@echo off set folder=c:\temp\111111111111111111111111111111111111111111111111111111111111111111111111111111111\111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 echo Создать папку с длинным путем pause md %folder% explorer %folder% echo. echo Создать в папке файл с максимально возможным по длине путем pause echo file >> %folder%\longpath.txt echo. echo Безуспешно попытаться создать файл с общим путем, превышающим допустимую длину pause echo. echo file >> c:\temp\verylongfile.txt copy c:\temp\verylongfile.txt %folder%\*.* echo. echo Создать символическую ссылку на папку pause echo. mklink /d C:\temp\link %folder%\ echo. echo Создать файл с путем, превышающим допустимую длину pause echo. echo file >> C:\temp\link\verylongpath.txt echo. echo Сопоставить папку с длинным путем букве диска pause subst V: %folder% subst echo. echo Создать еще один файл с путем, превышающим допустимую длину pause echo. echo file >> V:\superpuperlongpath.txt echo. echo Удалить все созданные сейчас файлы, папки, ссылки и буквы диска echo Вы должны вручную удалить папку 1111111111 pause echo. rd /s /q %folder% rd /s /q C:\temp\link del /f /q C:\temp\verylongfile.txt subst /d V: echo. echo Это все :) pause
Поскольку пояснения кириллические, файл нужно сохранять в кодировке MS-DOS (подсказка – у вас всегда пока есть WordPad :)
Прежде чем удалять все файлы на последнем шаге, вы можете поиграть с созданными файлами и папками в файловом менеджере. Вы увидите разные сообщения. Например, при попытке копирования файла в папку:
При создании нового текстового документа (стандартное имя длинное):
Разные консольные команды тоже на свой лад сообщают об ограничении.
Дискуссия
Вообще, длина пути в 260 символов это анахронизм, хотя я не припоминаю, когда сталкивался с ограничением в последний раз. Однако я уже давно не раскладываю все по папочкам, и уж тем более с такими адскими именами.
А вы давно сталкивались с ограничением на длину пути? Напишите в комментариях, как вы справились с проблемой или какое еще решение вы знаете. Я специально не указал все решения задачи:)
Upd. В комментариях читатели поделились своим опытом по обходу ограничения на длину пути:
- FAR (файловый менеджер)
- robocopy (утилита командной строки, входящая в состав современных Windows)
unreal666
как для эксперимента на win 7 создать теневую копию какой-либо папки? Тогда можно было бы поэкспериментировать с длинными именами.
Vadim Sterkin
Создайте точку восстановления, см. связанные статьи. Код в статье пригоден для эксперимента без теневых копий.
unreal666
я чего спросил. Просто фиг его знает, чем там пути в теневых копиях отличаются от обычных.
Если это такие же обычные пути, то можно юзать даже jscript/vbscript + com-библиотека DynamicWrapper v2 + нативные юникодные WinAPI + UNC-пути.
Или python + UNC-пути.
Vadim Sterkin
Я тоже знаю карате, кунг-фу и еще много других страшных слов :)
Павел
Сталкивался с этой проблемой буквально недавно. Приходилось сокращать названия родительских папок.
Vadim Sterkin
Павел, этот вариант решения я не рассматривал ввиду очевидности :)
maxx
Не совсем про длину пути, но тем не менее: мои документы структурированы и хранятся в OneDrive, сотрудник внес изменения, и тут бах — ошибка синхронизации «бла-бла-бла неправильный путь» или как-то так. Долго пытался понять, что же случилось. Оказалось, файл переименовали таким образом, что в начале имени оказался пробел. Причем при копировании файла, допустим, на рабочий стол, пробел в имени самостоятельно исчезал. Интересно, а если бы мне понадобилось восстановить теневую копию подобного файла, удалось бы?
Vadim Sterkin
Макс, если можно зайти в теневую копию в проводнике, то в чем проблема? :)
zelenin
при установке библиотек для node.js все зависимости складываются не в корне папки node_modules, а для каждой библиотеки отдельно внутри ее папки. Таким образом выстраивается огромное дерево с многократной вложенностью. На Windows это привело к тому, что невозможно удалить папку. Никакие советы из интернета не помогли, кроме одного, давно забытого мною — удалить папку из GUI 7zip.
unreal666
unlocker без проблем удаляет такие файлы/папки
алексей
Постоянно с длинными именами возникают проблемы в техотделе. Такая там структура папок. Приходит на буквы вешать пути.
Александр [Маздайщик]
Пользуюсь Far Manager’ом. Он со второй версии может работать с именами практически любой длины. А старые версии да, выдавали ошибку. Справлялся при помощи subst.
Техническое отступление (для программистов)
При использовании юникода в функцию CreateFile и некоторые другие можно передавать очень длинные имена файлов, при условии, что они записаны в UNC-формате (как сетевое имя, начинаются с \\). Для ссылки на локальный файл в UNC-формате можно использовать префикс \\.\ или \\?\. Кстати, так можно создать и файлы с зарезервированными именами CON, NUL и другие:
Ввиду того, что со второй версии Far перешёл на юникод и в нём можно создавать, модифицировать и удалять файлы с зарезервированными именами без проблем, можно предположить, что он внутри использует UNC-пути.1
Конец технического отступления
Демотиваторы (и другие картинки с текстом), которые мне понравились, я сохраняю на диск с именем, содержащим сам текст на картинке из соображений индексации. Знаю, что можно вписать текст в EXIF-метки, но модифицировать скачанный бинарный файл не хочу, поэтому переименовываю. Однажды для картинки задал такое длинное имя (переименовал через IrfanView), что теперь она не открывается через проводник и руки не доходят эту картинку переименовать нормально.
Антон
Проблема не в длинном пути к файлу как таковом, а в длине параметров, принимаемых некоторыми API-функциями работы с файлами и каталогами. С точки зрения файловой системы (NTFS, в частности) путь может быть и больше 260 символов, но обратиться к файлу, передавая этот путь целиком, не получится.
При этом любой путь можно легко превратить как в более длинный, так и в более короткий, например переименовав какой-то каталог в середине пути.
Пример:
Было C:\12345\2\67890\файл.txt
Каталог «2» можно переименовать в имя длиной, например, 250 символов (в итоге общая длина пути до каталога «2» составит менее 260 символов, что допустимо, а вот всё что глубже станет недоступным).
Vadim Sterkin
Антон, в 250 символов папку переименовать не получится :)
Антон
Это почему не получится? Вот http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx#maxpath у них
путь
D:\256 символов + NULL
вполне получился (3+256+NUL-символ = 260 символов)
А в моем примере
C:\12345\ + 250 симв. + NUL-символ= 9 + 250 + 1 = 260
Vadim Sterkin
Антон, вы не теоретизируйте, а пробуйте, тогда узнаете, что не получится. А там и догадаетесь, почему :) Если что, я подскажу.
Антон
В Far Manager прекрасно и создается, и переименовывается.
Vadim Sterkin
Антон, тогда предположу, что для FAR и ограничение в 260 не помеха, и приведенная вами цитата MSDN на него не распространяется. Я же отвечал вам в контексте ограничения в 260 символов (а не в принципе) — попробуйте в проводнике или cmd.
Антон
Всё оказывается ещё смешнее. У WinAPI функции CreateDirectory, как выяснилось, лимит еще меньше — 248 символов:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363855%28v=vs.85%29.aspx
There is a default string size limit for paths of 248 characters. This limit is related to how the CreateDirectory function parses paths.
Vadim Sterkin
На это я вам и намекал, но смешного тут ничего нет (это вытекает из ограничения 260 — подумайте, почему). А как его узнать без чтения документации и ручного подбора максимальной длины? :)
Александр [Маздайщик]
Я писал уже выше, почему Far Manager может оперировать с очень длинными именами.
Дмитрий
Здравствуйте! неделю назад, компьютер заразился вирусом, его название я правда не знаю, ну все файлы стали с расширением докладная.doc.id-8384986410_decrypt@india.com теперь вот не знаю что делать, я пробовал писать сообщение на этот адрес decrypt@india.com они мне ответили что цена дешифратора 550$ эта получается 20 000р где та. Есть ли какой нибудь другой выход, чтобы расшифровать файлы и т.д ?
Стас
Возможно, автор вируса — школьник, тогда алгоритм «шифрования» XOR, а «ключ» — новое расширение файла или его (расширения) часть. Напоите пивом знакомого быдлокодера, и он вернет вам ваши документы. Но сперва вылечите рабочую машину.
Vadim Sterkin
Дмитрий, на OSZone есть форум Лечение.
AlexPro1965
Рекомендую посмотреть неплохую бесплатную программу ShadowExplorer.
http://www.shadowexplorer.com/
Дмитрий
А для чего она служить, можно подробнее её описание? просто еще 1с полетело, для бухгалтеров это катастрофа, не сколько организаций тоже столкнулись с такой проблемой, так и решение не нашли, антивирусные программы её не видят как вирус…
Alexpro1965
Программа для удобной работы с теневыми копиями.
Про эту программу я написал не для Вас, а в данную обсуждаемую тему.
А Вам нужно обратиться в тему обсуждения лечения зараженных компьютеров.
А лучше обратитесь к специалистам.
Хотя можно попробовать этой программой вытащить необходимые данные.
Vadim Sterkin
Да, эту программу читатели рекомендуют в каждой записи, где упоминаются теневые копии :) А что, она позволяет решить поставленную в записи задачу?
Тарас
У меня было, месяц назад. На сервере сетевой диск. Говорят раньше могли, а сейчас не можем сохранять, ну я предложил укоротить имя файла но все равно вопрос остался, почему раньше да а сейчас нет. Они ведать изменили (удленили) имя как в примере навел Антон.
Саша
Когда-то из архива достал файл с огромным именем в нескольких (>10) подкаталогах. Дальнейшие обычные операции с файлом были не возможны. Мне подсказали что и имена подкаталогов учитываются — я переименовал все папки на «1» и это помогло — имя/путь влез в некий максимум. Решение ламера, да.
Попозже я читал о Subst но больше подобной проблемы не встречал.
Marius
да сталкивался несколько раз но всегда это было связанно с копированием каких-то файлов из смартфона …………. что на старом WM что на новом Android этих проблем нет а на винде почему-то есть …….. где справедливость то :))))))))
Atercat
Регулярно сталкиваюсь, когда увольняются сотрудники, и все, что нажито их непосильным трудом, нужно переместить во временное хранилище (своеобразная корзина). Правда у нас 8dot3-имена включены, они и выручают :)
littleleshy
Сталкивался с этой бедой при копировании файлов, решил с помощью Far Manager’а.
До простого и элегантного решения с символической ссылкой я тогда не догадался.
urix
Я регулярно сталкиваюсь с превышением длины пути.
Когда копирую с клиентских винчестеров файлы на временный диск, естественно, добавляются дополнительные символы в виде имени папки.
Матвей
Сталкивался с ограничениями по работе — при копировании профиля пользователя в папке C:\Users\%username%\AppData\\Local\Lotus\Notes\Data лежат какие-то лотусные файлы с длинными именами, и при копировании проводником система ругается на длину пути. При копировании с помощью robocopy или TotalCommander проблем не возникало.
Vadim Sterkin
Наконец-то robocopy!
Антон
Мне вот тоже иногда не хватает длины пути из-за ограничений ОС. Страдает синхронизация с облаками, например.
Когда много различных проектов и подпроектов в работе, без четкой и понятной иерархии папок трудно найти нужную.
Больше всего в ОС Windows 8.1 меня раздражает кривой поиск. Я бы с удовольствием бы пользовался поиском, но ОС заточена под поиск файлов, а не папок. Как результат — длинющаяя портянка файлов, среди которой очень трудно найти нужную папку и быстро в нее перейти. Да и ищет такой поиск долго, несмотря на все включенные индексации и SSD 256 (samsung 840 pro) с примерно половиной свободного места.
«Недавние папки» — тоже далеко не всегда показывают папку, которую я недавно закрыл или в которой создавал файл, или открывал/сохранял файл через какую-либо программу. Т.е. «недавние папки» работают как то очень своеобразно.
Итого, без четкой иерархии с понятными (и длинными) названиями папок, у многих из которых есть нумерация в начале папки (чтобы сортировка была не по алфавиту, а как нам в компании удобно, нумерация папок у проектов соответствует жизненному циклу проекта) и есть дата (формата 2014-09-11), не обойтись.
Хотя хотелось бы=)
Vadim Sterkin
Ерунда
папка:часть_имени_тут
Антон
Попробовал, вбивал в строку поиска в проводнике. OC — Win 8.1
http://prntscr.com/4m0qio
Результат — опять большая портянка всех файлов (которые, походу, входят в папку, которую я ищу), а не папок.
Да, в пути подсвечивается папка (и то, не у всех файлов, а у тех, у которых нужная папка «ближе» к корню диска.
У остальных файлов даже папка не подсвечивается, а скрыта за многоточием: http://prntscr.com/4m0qne
Итого, способ такой-же не эффективный. В сам поиск писать дольше (надо написать папка:) и на выдаче опять портянка файлов вместо, например, ~5 папок. Или я не понял как правильно делать=)
Вадим, и про «недавние места» можете еще прокомментировать? Есть способ как то улучшить работу с ними?
Vadim Sterkin
Антон, сорри, писал по памяти с телефона :) Правильный фильтр вид:=папка. Помимо ввода вручную, в 8+ выбирается из меню Тип (издержки локализации), когда курсор в поле поиска.
Недавние места не поддаются настройке.
Антон
Спасибо за подсказку!
не айс, конечно, но хотя бы так. файлы я совсем практически не ищу, а папки — постоянно.
еще раз спасибо!
Виталий К. ©
Эх, а в ХР это делалось банальным перетаскиванием мышкой в нужный порядок )))
Everything в помощь- там есть фильтр «Папки» (запоминается при выборе), и поиск мгновенный.
По теме записи- как то не сталкивался.
Антон
Я попробовал Everything, очень понравилась скорость поиска. Все мгновенно находит вообще мгновенно, и файлы, и папки. Встроенный поиск Windows нервно курит в сторонке по скорости поиска=)
Спасибо за прогу.
Андрон
Поиск папок в 8.1 абсолютно мгновенный, также как и поиск файлов. Просто вводите в строке Поиска Проводника 2-3 буквы — и результат на лицо. Следует напомнить, что содержимое должно быть проиндексировано. Вот пример:
https://cloud.mail.ru/public/7ffea94e318e%2F%D0%9F%D0%BE%D0%B8%D1%81%D0%BA.PNG
Алексей
Пользуюсь Total Commander — он адекватно работает с длинными путями, до проблем «Проводника» и извращений с этим связанными мне уже давно никакого дела нет.
Vadim Sterkin
Алексей, зато у вас другие проблемы (кстати, я угадал ваш ФМ :)
unreal666
Total Commander сейчас и 64-битный есть. Так что если юзать его на 64-битный ОС, то данной проблемы не должно быть.
Vadim Sterkin
Есть, но я же не придумывал эту проблему — мне ее доставили в качестве претензии к моему скрипту :)
Георгий
Копировал бэкап со сгоревшего компа на свой (Win7) стандартным проводником. В итоге общий путь до файла был очень длинным и проводник сказал, что скопировать файл нельзя. В итоге взял totalcommander и всё скопировалось только лишь с одним запросом о том, что путь слишком длинный.
Андрон
Самый простой выход в этом вопросе — не заниматься извращениями и не создавать странную древовидную структуру. Для быстрого доступа к информации существуют более легкие и простые пути. Читайте Справку Windows или блог Стеркина.
зы. Но мы не ищем легких путей)))
QBL
Когда-нибудь работали на предприятии с активно развивающейся базой по номенклатуре, КД и пр.? Вопрос риторический, можете не отвечать.
Алексей
Здравствуйте!
Очень полезный пост. Буквально месяц назад ломал голову как обойти это ограничение, и как раз по причине описанной вами. Проблему решил этим же методом, я так понимаю что это единственный метод.
Vadim Sterkin
Алексей, не единственный — в статье их два, а в комментариях есть еще пара (я добавил их в конец записи).
Arden
Интересное решение.
Сам при таких проблемах делал либо при помощи программы killcopy, еще стоит terracopy. Totalcommander редко использую.
Но как вы считаете, как лучше сделать, если ты, допустим, поставил на копирование кучу файлов на внещний hdd, он тебе перекачивает, потом говорит, что ай ай ай длинное имя. Но не дает возможности переименовать или что-то еще. Только пропустить и прервать. А вы понимаете, что потом заниматься поиском пропущенных файлов ой как не хочется. Так вот, как на таком этапе дешевле всего решить проблему?
Гамлет Принцдатский
Я решил эту проблему через подключение сетевого диска. Подключаем сетевой диск на папку выше той папки, где удален файл ну, а дальше восстанавливаем файл
Vadim Sterkin
А что мешало восстановить в любую папку локального диска?
Гамлет Принцдатский
Отсутствие свободного места на локальном диске.
Дмитрий Г.
Я храню разные заметки по работе в многих папках и подпапках. А иногда в такой под-под-под-…папке сохраняю вэб-страницу с длинным исходным названием. И все бы ничего — но при попытке скопировать эту структуру, например, из rar-архива на домашний компьютер — получаю отказ.
Есть ли какое-то средство (программа) для мониторинга/проверки текущей структуры папок-файлов на приближение к 250символам?
Vadim Sterkin
OneNote и поиск по нему — отличная замена маниакальной вложенности папок.
Дмитрий Г.
Спасибо. А файлики в документ OneNote можно вложить/прикрепить?
Vadim Sterkin
Конечно
QBL
Проблемы с ограничением на длину файлов — постоянная проблема тех, кто сохраняет страницы из веба целиком. Если только не перенести предлагаемую по умолчанию папку загрузок. При этом, как правило, браузеры позволяют создавать такие файлы/каталоги, а система не позволяет их копировать, или читать.
Edward Kablukov
Я после приобретения компа поставил три оси на три раздела- win xp, win 7 32bit, win 7 64 bit.- к первой я привык, а семёрки поставил т.к. на сайте произв матплаты не было драйверов для XP, только для 7- комп 2012 г вып. Захотел переместить сохранённые интернет-страницы, а семёрка сказала- длинные имена. Перезагрузил на ХР и всё переместил без возражений. Так паранойя ( иметь несколько осей на всякий пожарный) спасла.
Максим Левин
Копируйте файлы с помощью файлового менеджера Total Commander и не морочтесь)
Vadim Sterkin
Максим, без ТС вы лапки вверх поднимите сразу?
Yauheni Vadatyiets
Приветствую
Сейчас на вин 10
Заметил что перестали копироваться некоторые файлы через софт синхронизации, попробовал скопировать вручную — ошибка «файловая система не поддерживает такие длинные имена …», подумал может с внешним винтом что, форматнул его, ничего не изменилось. Работал с этими файлами еще на вин7, потом на вин8-8.1 проблем не замечал, может поддержка както выключилась?
теперь эти файлы не копируются и не удаляются (только через unlocker), ошибок на диске не обнаружены
Vadim Sterkin
Вам сюда http://www.forum.oszone.net
Дмитрий Львов
Кстати, хорошие идеи., хотя не проверял, но возьму на заметку. На работе сталкивался часто на файловом сервере, т.к. народ любит положить кучу под папок(имя папки — это целое название отдела или вырезки из ФЗ:)) ),а потом первые папки переименовать по подробнее. Решение временное я нашел путем переименовывания под папок в простые имена «1», «2» и .т.д.
Александр
Когда давалось бесплатное обновление на Windows 10 обновился с 8. Однако пользоваться сырой системой не хотел. Забэкапил ее с помощью акрониса. Сейчас хочу восстановить. Установил пиратскую 10 и подключил как диск резервную копию. Из него хочу скопировать файлы оригинальной системы, чтобы потом заменить ими пиратку. При копировании в отдельную папку столкнулся со слишком длинными именами и путями. Подскажите, есть ли файловый менеджер которая обходит при копировании все эти ограничения?
Vadim Sterkin
Александр, все ответы есть в статье
Иван Костров
Спасибо, очень помогли ваши статьи спасти файлы после трояна-шифратора.
Vadim Sterkin
Рад, что помогло
Андрей Парсаданян
Супер! Это помогло исправить ошибку uTorrent:
Системе не удается найти указанный путь.
Спасибо.
Юрий Сергеевич
Проблема высасана из пальца.
1) Архивируем нужное в iso архив с помощью UltraISO
2) Копируем(перемещаем) в целевую папку
3) Извлекаем из архива всё той же UltraISO.
Vadim Sterkin
Решение высосано из пальца. Это дольше, да и вообще не прокатит, если UltraISO нет, а покупать его организация не будет.
Q
Far помог, прочитал у Вас в блоге.
столкнулся когда разархивировал бэкап сайта из Unix системы.
p.s.
и заодно удалил папку которая имело неизвестное количество вложенности, которую виндовс не удалял никаким макаром, robocopy и bat не помогал (он помог переименовать в 1символ что не уменьшило длину пути).
в общем остатки от вируса на Unix легко скопировался в виндовс и не удалялся стандартными средствами.
Неясно конечно как ОНО изначально скопировалось обычными средствами виндовс.
Віхтьор Хамнюковічь
Когда-то искал решение подобной проблемы.
Помогла небольшая утилитка Long Path Fixer for Windows.
Бесплатная, безустановочная.
С ее помощью можно переместить, скопировать, или удалить любой файл с любой длиной пути.
Mikhail Tchervonenko
используйте для копирования, переименования и шифрования CopyMik он умеет работать с длинными путями и именами.
http://www.superbasis.de/copymik/index.htm#rus