Ako odstrániť súbor s dĺžkou cesty viac ako 260 znakov

Nie je žiadnym tajomstvom, že program Prieskumník systému Windows, rovnako ako väčšina ostatných aplikácií systému Windows vrátane PowerShell, nemôže pracovať s objektmi systému súborov s hlbokým vnorením priečinkov., dĺžka cesty, ktorá presahuje 260 znakov. Toto obmedzenie navyše existuje iba na aplikačnej úrovni a samotný súborový systém NTFS podporuje cesty k súborom až do 32767 znaky.


Toto obmedzenie ukladá knižnica. Win32 API, s maximálnou dĺžkou cesty 260 znakov (MAX_PATH = 260). Vo všeobecnosti je cesta vytvorená z nasledujúcich prvkov:  [C: \] + [path_of_256_characters] + [], a maximálna dĺžka jedného adresára / súboru v NTFS je 255 znakov v Unicode. Pri používaní funkcií unicode API je možné použiť cestu k 32767 znaky. Z tohto dôvodu existuje mnoho programov tretích strán (napríklad rovnakí populárni správcovia súborov FAR a Celkový veliteľ) spracováva súbory / priečinky bez akýchkoľvek problémov, ktorých dĺžka cesty presahuje 260 znakov.

rada. Toto obmedzenie rozhrania Win32 API sa dá obísť a pracovať s dlhými názvami súborov pomocou formátu UNC cesty, čo znamená absolútnu cestu k súboru pomocou predpony cesty s predĺženou dĺžkou \\? \. Napríklad \\? \ C: \ SomeLongPath \ LongNameFile.txt

Toto obmedzenie sa nevzťahuje ani na prístup používateľov k sieti prostredníctvom protokolov SMB (z tohto dôvodu nie sú na súborových serveroch s užívateľskými údajmi neobvyklé adresárové štruktúry s dlhými cestami). Správca obsluhujúci tento server nemôže spravovať (mazať / presúvať) súbory s dlhými cestami prostredníctvom štandardného rozhrania Prieskumníka Windows. Pri pokuse o vytvorenie / kopírovanie súboru do tohto adresára sa objaví chyba:

Cieľová cesta je príliš dlhá. Názvy súborov by pre cieľový priečinok boli príliš dlhé. Môžete skrátiť názov súboru a skúste to znova alebo skúste umiestnenie, ktoré má skrátenú cestu

Iné programy / dialógy môžu naznačovať obmedzenia vlastným spôsobom..

Je smiešne, že rok 2014 je za oknom a stále hovoríme o limite 260 znakov pre maximálnu dĺžku cesty v systéme Windows ... Zdá sa však, že v blízkej budúcnosti sa neočakávajú žiadne zásadné zmeny, a to ani v úplne čerstvom technickom náhľade Windows 10. Toto obmedzenie stále existuje.

V tomto článku si ukážeme, ako v systéme Windows môžete pracovať so súbormi, ktorých cesta presahuje 260 znakov. V tomto prípade je našou úlohou odstrániť adresár obsahujúci súbory s dlhou cestou.

Pri pokuse odstrániť takýto adresár z Prieskumníka sa zobrazí chyba:

Názvy súborov by pre cieľový priečinok boli príliš dlhé. Môžete skrátiť názov súboru a skúste to znova alebo skúste umiestnenie, ktoré má skrátenú cestu.

Powershell tiež nedokáže správne spracovať adresáre a súbory s veľkými cestami presahujúcimi 260 znakov. Pri pokuse o vymazanie adresára s takýmito súbormi (C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath) sa zobrazí chyba:

Odstráňte položku. \ Verylongpath -Recurse

Remove-Item: Zadaná cesta, názov súboru alebo obidve sú príliš dlhé. Úplný názov súboru musí byť menší ako 260
a názov adresára musí mať menej ako 248 znakov.
Na riadku: 1 znak: 1
+ Odstráňte položku. \ Verylongpath -Recurse
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: WriteError: (C: \ Install \ MS S ... it \ verylongpath: String) [Odstrániť položku], PathTooLongExcepti
na
+ FullyQualifiedErrorId: RemoveItemIOError, Microsoft.PowerShell.Commands.RemoveItemCommand

Najjednoduchšou možnosťou (ktorá sa v skutočnosti navrhuje v chybovom okne) je skrátiť názov nadradených priečinkov a skrátiť celkovú dĺžku cesty (ale nie vždy)..

Ďalšou možnosťou je vytvoriť symbolický odkaz na časť cesty, čím sa skráti celková dĺžka cesty:

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

Ďalej by sa mali operácie so súbormi vykonávať s adresárom, ku ktorému je priradené symbolické spojenie..

Ďalšou možnosťou, ktorá sa podobá práci so symbolickým odkazom, je zmapovanie priečinka problémov na virtuálny disk (v našom príklade X :), čím sa zníži aj dĺžka cesty:

Subst X: “C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath”

Teraz môžete pracovať s údajmi na jednotke X:, cesty súborov, v ktorých nepresiahne limit. Po dokončení práce môžete virtuálny disk odstrániť:

Látka X: / d

Osobne sa však pri odstraňovaní údajov v takýchto situáciách najviac páčia možnosti Robocopy.exe, ktorý podporuje dlhé cesty.

Pomocou voľby / MIR, obslužný program robocopy môže vytvoriť úplnú kópiu (zrkadlo) zdrojového adresára v cieli. Ak je zdrojový priečinok prázdny, vymažú sa aj všetky údaje v cieľovom priečinku. Vytvorte prázdny priečinok C: \ Install \ test a pomocou argumentu / MIR skopírujte obsah testovacieho priečinka do cieľového priečinka (ak názov priečinka obsahuje medzery alebo azbuky, cesta musí byť uzavretá v úvodzovkách).

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

Po vykonaní príkazu sa obsah adresára C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath vymaže (nahradí sa obsah prázdneho adresára).

Dnes sme teda ukázali niekoľko jednoduchých trikov, ktoré môžete použiť pri práci so zložkami na súborových serveroch obsahujúcich priečinky, ktorých dĺžka cesty presahuje limit 260 znakov.