Не е тайна, че Windows Explorer, подобно на повечето други приложения на Windows, включително PowerShell, не може да работи с обекти на файловата система с дълбоко влагане на папки. чиято дължина на пътя надхвърля 260 знака. Освен това това ограничение съществува само на ниво приложение, а самата файлова система NTFS поддържа файлови пътища до 32767 герои.

Това ограничение е наложено от библиотеката Win32 APIи чиято максимална дължина на пътя е 260 знака ( MAX_PATH=260). Като цяло пътят се формира от следните елементи: +[path_of_256_characters]+[ ] , а максималната дължина на една директория/файл в NTFS е 255 знака в Unicode. Когато използвате Unicode API функции, е възможно да използвате пътя до 32767 герои. Благодарение на това много програми на трети страни (същите популярни файлови мениджъри, например ДАЛЕЧИ Total Commander) без никакви затруднения обработва файлове/папки, чиято дължина на пътя надвишава 260 знака.

съвет. Можете да заобиколите това ограничение на API на Win32 и да работите с дълги имена на файлове, като използвате UNC формат на пътя, като посочите абсолютния път към файла с помощта на префикса на пътя с разширена дължина \\?\ . Например като това \\?\C:\SomeLongPath\LongNameFile.txt

Това ограничение също не се прилага, когато потребителите имат мрежов достъп до файлове чрез SMB протокол (поради това структурите на директории с дълги пътища са често срещани на файловите сървъри с потребителски данни). Администраторът, поддържащ този сървър, не може да управлява (изтрива/премества) файлове с дълги пътища през стандартния интерфейс на Windows Explorer. При опит за създаване/копиране на файл в такава директория се появява грешка:

Пътят на дестинацията е твърде дълъг. Имената на файловете ще бъдат твърде дълги за целевата папка. Можете да съкратите името на файла и да опитате отново или да опитате местоположение, което има съкратен път

Други програми/диалогови прозорци може да имат свой собствен начин за отчитане наличието на ограничението.

Съгласете се, смешно е, че сме 2014 г. и все още говорим за ограничението от 260 знака на максималната дължина на пътя в Windows... Но изглежда, че не се очакват драстични промени в близко бъдеще и дори в най-новото Windows 10 Technical Preview това ограничение все още съществува.

В тази статия ще покажем как в Windows можете да работите с файлове, чийто път надхвърля 260 знака. В този случай нашата задача е да изтрием директория, съдържаща файлове с дълга дължина на пътя.

Когато се опитате да изтриете такава директория от Explorer, се появява грешка:

Имената на файловете биха били твърде дълги за целевата папка. Можете да съкратите името на файла и да опитате отново или да опитате местоположение, което има съкратен път.

Powershell също не може да обработва правилно директории и файлове с големи пътища, надвишаващи 260 знака. Когато се опитате да изтриете директория с такива файлове (C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath), се появява грешка:

Remove-Item .\verylongpath -Recurse

Remove-Item: Посоченият път, име на файл или и двете са твърде дълги. Напълно квалифицираното име на файл трябва да е по-малко от 260
знака, а името на директорията трябва да е по-малко от 248 знака.
На ред:1 знак:1
+ Remove-Item .\verylongpath -Recurse
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: WriteError: (C:\Install\MS S...it\verylongpath:String) , PathTooLongExcepti
на
+ FullyQualifiedErrorId: RemoveItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

Най-простият вариант (всъщност се предлага в прозореца за грешка) е да съкратите името на родителските папки, като намалите общата дължина на пътя (но това не винаги е приложимо).

Mklink /d c:\install\link “C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath”

Друг вариант, напомнящ на работа със символна връзка, е да картографирате проблемната папка към виртуален диск (в нашия пример X:), като по този начин също намалите дължината на пътя:

Subst X: „C:\Install\MS SQL 2012 Express Edition 64 бита\verylongpath“

Сега можете да работите с данни на устройството X:, пътищата до файловете в които няма да надвишават ограничението. След приключване на работата можете да изтриете виртуалния диск:

Субст X: /d

Но лично това, което ми харесва най-много за задачата за изтриване на данни в такива ситуации, е способността robocopy.exe, който поддържа работа с дълги пътища.

Използвайки опцията /МИР, помощната програма robocopy може да създаде пълно копие (огледало) на изходната директория в целевата директория. И ако изходната папка е празна, всички данни в целевата папка също се изчистват. Нека създадем празна папка C:\Install\testи използвайки аргумента /MIR, копирайте съдържанието на тестовата папка в целевата папка (ако името на папката съдържа интервали или знаци на кирилица, пътят трябва да бъде ограден в кавички).

Robocopy /MIR C:\Install\test "C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath"

След изпълнение на командата съдържанието на директорията C:\Install\MS SQL 2012 Express Edition 64 bit\verylongpath се изчиства (заменя се със съдържанието на празната директория).

И така, днес показахме някои прости трикове, които можете да използвате, когато работите с папки на файлови сървъри, които съдържат папки, чиято дължина на пътя надвишава ограничението от 260 знака.

Заглавието се оказа дълго, но показва същността на проблема, който ще бъде описан тук. Наскоро се сблъсках с не много добра ситуация. Докато сортирах твърдия диск и го изчиствах от ненужни неща, открих, че един от файловете не е изтрит, но се появи следната грешка: „Файловата система не поддържа толкова дълги имена на изходни файлове. Опитайте да преместите файла в папка с по-къс път или задайте по-кратко име на файл и опитайте отново."

Не само не можах да изтрия файла, но и не можах да променя името му с по-кратко. За мнозина това би изглеждало като задънена улица, защото се оказва, че файлът не е изтрит.

Всъщност проблемът може да бъде решен много лесно и бързо и сега ще опиша два метода за решаването му, а вие решавате кой да използвате.

Какво да направите, ако пътят до източника е твърде дълъг, как да изтриете такъв файл?

Ако имате файл, който не е изтрит поради дълго име, има няколко опции за решаване на проблема. Например, файлът е вложен в няколко директории, да речем пет или дори десет папки, които имат имена от 10-20 знака, тогава това може да е причината да не изтриете файла. Факт е, че Windows не поддържа никакви файлове, чиито имена надвишават 260 знака. Ако това ограничение бъде надвишено, ще се появи грешката, която показах по-горе. Броят на папките със собствени имена и самото име на файла трябва да съдържа общо по-малко от 260 знака. Системата има и една особеност - ако това ограничение бъде превишено, пак можем да преименуваме папки. Това означава, че трябва да преименувате всички папки с кратко име, например буква или цифра.


Този проблем може да възникне не само защото сте дали толкова дълго име. Това ми се случи, когато реших да изтегля файлове от уебсайта от сървъра и да направя нещо. Тъй като файловете вече не бяха необходими, изтрих цялата директория с файловете на сайта, но както се оказа, той съдържаше файл с много дълго име, плюс имена на папки, и това не ми позволи да изтрия всичко.

Метод вторище помогне, ако първият се провали. Факт е, че не всички папки, водещи до файл с дълго име, могат да бъдат преименувани и ще възникне същата грешка на файловата система. След това можете да създадете виртуален диск, като използвате някоя от подпапките, водещи до файла, който не може да се изтрие. Сега ще ви покажа как да направите това.

Отворете командния ред. За да направите това, натиснете комбинацията Win+R и въведете командата cmd. Можете да щракнете с десния бутон върху менюто "Старт" (или клавишната комбинация Win+X) и да изберете командния ред там.

Сега пишете команда, която ще създаде виртуален диск за нас:

Трябва да изберете буква на устройство, която не е заета от други. Системният дял обикновено се обозначава като C, а вторият дял като D или E, след което изберете всеки друг.

Пътят до папката трябва да бъде указан от диска. Ако това ви е трудно, отворете папката, която ще действа като виртуален диск и копирайте пътя до нея в Explorer в горната част.

Моята команда изглежда така:

Когато отидем в Моят компютър, трябва да видите устройство там с буквата, която сме му присвоили от командния ред. По този начин пътят до файла ще бъде намален почти наполовина, което означава, че общата дължина на символите може да бъде по-малка от 260 знака. Сега можете да опитате да се отървете от неизтриваемото.


За да изтриете виртуален диск трябва да въведете командата:

substDiskLetter/d

Използване на Total Commander

В интернет открих метод, който ви позволява да изтривате файлове, които не могат да бъдат изтрити с помощта на . Разбира се, недостатъкът тук е, че ще трябва да инсталирате допълнителен софтуер на компютъра си, а не всеки ще иска да направи това. Във всеки случай ще оставя този метод тук, в случай че някой иска да го използва.

Изтеглете и инсталирайте програмата. Да отидем на раздела "файл"щракнете върху секцията "Промяна на атрибути". Появява се прозорец, в който премахваме отметките от всички атрибути. Ако няма отметка до елемента в горната част „Процесирайте съдържанието на директорията“- изберете. Сега от същата програма се опитваме да изтрием файл с дълго име.


Ние използваме архиватора 7-Zip

За тази задача ще ни трябва 7-Zip архиватор. Щракнете с десния бутон върху началната директория и посочете мишката върху дяла "7-Zip"и изберете елемента „Добавяне към архив“.

Появява се прозорец, в който трябва да поставите отметка само в едно поле. „Изтриване на файлове след компресиране“. След това щракнете върху OK.

На работния плот се създава архив на всички тези неща, а папките с дълги файлове просто се изтриват. Можете да изтриете самия архив без никакви проблеми.

Това са начините, които разгледахме, за да коригираме грешката, че файлът не се изтрива. Може би имате други опции как да направите това?

Ето пример за структура на папки, която нарекох „голяма кукла“:

Както можете да видите, на устройство „D“ (Data) има папка източник на видео, в нея има папка „Филми“, в нея има „Всичко, което ви е необходимо за гледане на филми“ и след това по същия начин папка в папка. В същото време много папки имат дълги имена и имена - повече от 10-15 знака, което общо ще даде обем на знаците във всички имена повече от 260. И ако в края на такава „матрьошка“ има файл, тогава може да се окаже, че не можете да работите с него можете... Понякога самата система не ви позволява в крайна сметка да създадете папка или файл, който надвишава разрешения брой знаци, но понякога по някаква причина това се случва.

Първо, за начинаещи, ще обясня какво представлява пътят на файл и папка. Пътят е така нареченият адрес на компютъра, където се намира файлът или папката. Например файл, наречен „Моят файл.txt“, се намира на локалния диск D: в папката „Документи“. Тогава пътят до този файл ще изглежда така:

D:\Документи\Моят файл.txt

Или, например, така ще изглежда пътя от примера по-горе, където показах сложна структура на папките.

Както можете да видите, броят на знаците в пътя по-горе е голям и е възможно накрая да има файл или папка с дълго име, което не можете да изтриете.

Когато се опитате да изтриете файл с дълъг път, ще получите прозорец с грешка като този:

Опитах се изкуствено да пресъздам проблема и ето какво получих.

На устройство „D“ създадох папка с кратко име „1“ и поставих файл с много дълго име в нея. Ето един пример:

Сега също преименувам тази папка „1“ на някакво много дълго име, например:

Интересното е, че Windows свободно ви позволява да преименувате папка с такова дълго име, въпреки факта, че броят на знаците в името на тази папка + име на файл вече надхвърля 260! Е, след като преименувах папката с дълго име, вече не мога да изтрия файла, намиращ се в нея, и да получа грешката.

Или ето друг пример... Поддържам уебсайта на Московския колеж по приборостроене, където преди това работех на пълен работен ден, и понякога използвам копие на сайта на компютъра си, за да тествам някои нови „благини“ за сайта. Ами ако инсталирам нещо лошо и уебсайтът на хостинга умре? :) И така го проверявам на моя компютър и ако всичко е наред, тогава го настройвам на реален сайт, намиращ се на хостинга. И така, веднъж прехвърлих целия сайт от хостинг, за да тествам едно нещо и след като приключих работата, реших да изтрия папката със сайта от компютъра си. В крайна сметка тежи около 6 GB. Целият сайт беше изтрит, с изключение на няколко папки. Започнах да търся и видях, че тези папки, които съдържат файл с дълго име под формата на йероглифи, не са изтрити:

Опитах се да изтрия този файл с дълго име отново и видях същата грешка, която споменах по-горе. Опитах се да го преименувам, но и това не става. Е, трябваше да помисля как да реша проблема.

Как да решим проблема с изтриването на папка/файл с дълъг път!

Опитах 2 начина да изтрия папка/файл с дълго име в пътя до него. И двете не са технически трудни (особено първата), така че мисля, че начинаещият може да се справи, ако направи всичко точно както показвам:

    Преименувайте няколко папки в пътя на файла към по-кратко име. Това е най-простото решение, което вече трябва да помогне на мнозина! Да предположим, че имате файл в папка с много дълго име, който не можете да изтриете, отворите, копирате и като цяло не можете да работите с него.

    След това опитайте просто да преименувате папката, в която се намира файлът с дълго име, например на „1“. Нека се върна към един от примерите по-горе. Ето папка с дълго име:

    Използвайки стандартен Windows Explorer, преименувам името на тази папка на „1“ и ето как изглежда пътят до файла сега:

    Сега можете безопасно да работите с файла; системата ще ви позволи да го отваряте, преименувате и изтривате.

    Ако имате дълго дърво на папките, т.е. като кукла за гнездене, в една папка има друга, в нея има друга, след това още една, след това започнете да преименувате от първата папка от тази кукла за гнездене. Не с последния в списъка, а с първия!

    Възможно е да има огромен брой папки и да не можете да преименувате някои от тях поради същата грешка или това ще ви отнеме много време. В този случай предлагам втория метод.

    Методът е, че можете да вземете някаква папка, например в средата на общо дърво и да я свържете като виртуален диск. Виртуалният диск е нещо, което ни напомня за обикновен локален диск, но което е просто свързано с определена папка, например, за бързо взаимодействие с него.

    Да приемем, че имате дълъг път като този:

    D:\Video\My Movies\Всичко, от което се нуждаете, за да гледате филми\Програми за гледане на филми\Как да отваряте MP4 филми\Списък с MP4 примерни филми\Списък с програми за отваряне на MP4\Какво да не правите, когато отваряте MP4 файлове

    Да приемем, че в последната папка имаме някакъв проблемен файл, с който не можем да работим, тъй като пътят до него, както виждаме, е доста дълъг :)

    Можем да вземем и да свържем една от папките с дълго име в средата на пътя като виртуален диск. Нека това да е папката „Програми за гледане на филми“.

    За да свържете виртуален диск, се нуждаем от така наречения команден ред на Windows, т.е. конзола.

    Можете да го отворите чрез търсене в Windows. В търсенето въведете „Команден ред“:

    В прозореца на командния ред трябва да напишем командата:

    subst virtual_disk_letter "path_to_folder"

    Можете да зададете произволна буква на устройство, стига да не е вече заета от някое от локалните устройства. Например, имате локално устройство C и D, което означава, че вече не можете да извиквате виртуалното устройство със същата буква. Можете да го наречете например буквата "X", защото рядко се използва в Windows.

    За пътя на папката вмъквате пътя към папката, която искате да свържете като виртуална. Както вече казах, в моя пример ще направим „Програми за гледане на филми“ като виртуална папка, което означава, че пътят трябва да бъде указан по следния начин:

    D:\Видео\Моите филми\Всичко необходимо за гледане на филми\Програми за гледане на филми\

    И така, крайната команда в моя случай ще изглежда така:

    subst X: “D:\Видео\Моите филми\Всичко, от което се нуждаете за гледане на филми\Програми за гледане на филми\”

    За да изпълните въведената команда, натиснете клавиша "Enter" на клавиатурата. Виртуалният диск ще бъде създаден.

    Сега нека отидем в Windows Explorer, отидете в секцията „Този ​​компютър“ (или „Компютър“) и вижте създадения виртуален диск там:

    Можете да го различите по буквата. Назначих буквата "X" на виртуалния диск. Сега, ако отворим този виртуален диск, веднага ще се окажем в папката „Програми за гледане на филми“. Тези. взехме и отрязахме половината път до последната папка.

    За сравнение...

    Преди пътят до крайната папка изглеждаше така:

    D:\Video\My Movies\Всичко, от което се нуждаете, за да гледате филми\Програми за гледане на филми\Как да отваряте MP4 филми\Списък с MP4 примерни филми\Списък с програми за отваряне на MP4\Какво да не правите, когато отваряте MP4 файлове

    След като свържете виртуалния диск към папката „Програми за гледане на филми“, пътят до крайната папка изглежда така:

    X:\Как да отворите MP4 филми\Списък с примерни MP4 филми\Списък с програми за отваряне на MP4\Какво да не правите, когато отваряте MP4 файлове

    Усещате ли разликата? Пътят е скъсен наполовина, тъй като буквата на устройството веднага ни насочва към папката в средата на пътя :) И тъй като пътят е силно скъсен, вероятно вече сте премахнали ограничението за знаци в имената на файлове и папки и ще можете да изтриете файл или папка с дълго име!

    След като решите проблема с файла, виртуалният диск може да бъде изтрит отново, за да не стане болно в очите на Explorer.

    За да направите това, отворете отново командния ред на Windows и въведете командата:

    Subst virtual_disk_letter /d

    В моя случай буквата на устройството е „X“, така че командата ще изглежда така:

Когато си мислех за опциите за решаване на проблема, как да изтрия папка или файл с дълго име, намерих друга опция в Интернет: изтрийте проблемния файл чрез програмата Total Commander. Пробвах го, не се получи, затова не препоръчах този метод :)) А методът дори и да работи за някого, честно казано не е забавен, защото трябва да инсталирате допълнителна програма на компютъра си за да изтриете само един файл или папка с дълго име...

Мисля, че ако възникне подобен проблем, който съм имал повече от веднъж, някой от описаните по-горе методи определено ще ви помогне.

Това е всичко! Ще се видим скоро в следващите статии;)

Вредната операционна система Windows ви пречи ли да изтриете файл и вика, че неговият „изходен път е твърде дълъг“? В тази статия ще ви кажа как лесно и просто, без никакви програми, да победите този бич, като съкратите името на файла.

Пътят до източника е твърде дълъг - защо?

Бих искал веднага да обясня защо се появява такова системно предупреждение и не е възможно да се извършат основни действия по копиране или изтриване на файл (папка)...

Самото известие съдържа отговора на този въпрос - файловата система на Windows не поддържа (не разбира) имена на изходни файлове, по-дълги от 255 знака.

Но името на вашия файл или папка е кратко, например „Ваканционни снимки“? Факт е, че „глупавата“ система възприема целия път до файла като негово име. Ако вашият файл или папка се намира някъде твърде дълбоко във файловия мениджър, тогава името му ще изглежда така...

Така че символите на името са събрани в група от повече от 255 части.

Как да изтрия неизтриваем файл или папка в този случай? Много е просто - трябва да съкратите името на файла (пътя), като преименувате вложени папки.

Как да изтриете файл с дълго име

Ще ви покажа с моя пример как да изтриете файл с дълго име, който, както пише системата, има твърде дълъг път до източника.

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

Започвайки от първата папка в този дълъг път, преименувах няколко неща...

... и се опита отново да се отърве от файла с вече по-кратко име - той безопасно отиде в страната на изтритите файлове.

Естествено името на новия файл (папка) трябва да се състои от един знак или цифра, както в моя пример.

Ето как лесно се решава проблемът с изтриването на файлове или папки с дълго име. Това разбира се не е единственият метод. може премахване със специални програмиили през регистъра - току-що показах ръчния метод. За някои това ще отнеме само минута, за други ще отнеме половин час - зависи от вас да решите как да съкратите името на файла и твърде дългия път до източника.

До нови полезни съвети и интересни компютърни програми.