Není žádným tajemstvím, že Průzkumník Windows, stejně jako většina ostatních aplikací Windows, včetně PowerShell, nemůže pracovat s objekty systému souborů s hlubokým vnořením do složek., délka cesty, která přesahuje 260 znaků. Toto omezení navíc existuje pouze na úrovni aplikace a systém souborů NTFS sám podporuje cesty k souborům až do 32767 postavy.
Toto omezení ukládá knihovna. Win32 API, s maximální délkou cesty 260 znaků (MAX_PATH = 260) Obecně je cesta tvořena z následujících prvků: [C: \] + [path_of_256_characters] + [], a maximální délka jednoho adresáře / souboru v NTFS je 255 znaků v Unicode. Při použití funkcí unicode API je možné použít cestu k 32767 postavy. Z tohoto důvodu existuje mnoho programů třetích stran (například stejné populární správce souborů Daleko a Celkový velitel) zpracovává soubory / složky bez jakýchkoli obtíží, jejichž délka cesty přesahuje 260 znaků.
Toto omezení se také nevztahuje na přístup uživatelů k síti pomocí souborů protokolu SMB (z tohoto důvodu nejsou adresářové struktury s dlouhými cestami neobvyklé na souborových serverech s uživatelskými daty). Správce obsluhující tento server nemůže spravovat (mazat / přesouvat) soubory s dlouhými cestami prostřednictvím standardního rozhraní Průzkumníka Windows. Při pokusu o vytvoření / zkopírování souboru do takového adresáře se objeví chyba:
Cílová cesta je příliš dlouhá. Názvy souborů by pro cílovou složku byly příliš dlouhé. Můžete zkrátit název souboru a zkusit to znovu, nebo zkusit umístění, které má zkrácenou cestuJiné programy / dialogy mohou naznačovat omezení svým vlastním způsobem..
Je zábavné, že rok 2014 je za oknem a stále hovoříme o omezení 260 znaků pro maximální délku cesty v systému Windows ... Zdá se však, že v blízké budoucnosti se neočekávají žádné zásadní změny, a to ani v úplně novém technickém náhledu systému Windows 10. stále existuje.
V tomto článku si ukážeme, jak ve Windows můžete pracovat se soubory, jejichž cesta přesahuje 260 znaků. V tomto případě je naším úkolem odstranit adresář obsahující soubory s dlouhou délkou cesty.
Při pokusu o odstranění takového adresáře z Průzkumníka se objeví chyba:
Názvy souborů by pro cílovou složku byly příliš dlouhé. Můžete zkrátit název souboru a zkusit to znovu, nebo zkusit umístění, které má zkrácenou cestu.Powershell také nedokáže správně zpracovat adresáře a soubory s velkými cestami přesahujícími 260 znaků. Při pokusu o smazání adresáře s takovými soubory (C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath) se objeví chyba:
Odebrat položku. \ Verylongpath -Recurse
Remove-Item: Zadaná cesta, název souboru nebo obojí jsou příliš dlouhé. Úplný název souboru musí být menší než 260
a název adresáře musí být menší než 248 znaků.
Na řádku: 1 znak: 1
+ Odebrat položku. \ Verylongpath -Recurse
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: WriteError: (C: \ Install \ MS S ... it \ verylongpath: String) [Remove-Item], PathTooLongExcepti
dál
+ FullyQualifiedErrorId: RemoveItemIOError, Microsoft.PowerShell.Commands.RemoveItemCommand
Nejjednodušší možností (která je ve skutečnosti navržena v chybovém okně) je zkrácení názvu nadřazených složek, zmenšení celkové délky cesty (ale ne vždy použitelné).
Další možností je vytvoření symbolického odkazu na část cesty, čímž se zkrátí celková délka cesty:
mklink / d c: \ install \ link "C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath"
Dále by měly být operace se soubory prováděny s adresářem, ke kterému je přiřazen symbolický odkaz..
Další možností, která se podobá práci se symbolickým odkazem, je namapovat problémovou složku na virtuální disk (v našem příkladu X :), čímž se také zkrátí délka cesty:
Subst X: “C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath”
Nyní můžete pracovat s daty na jednotce X:, cesty k souborům, ve kterých tento limit nepřekročí. Po dokončení práce můžete virtuální disk odstranit:
Látka X: / d
Ale pro mě osobně, pro úkol mazání dat v takových situacích, se mi líbí funkce robocopy.exe, což podporuje dlouhé cesty.
Pomocí volby / MIR, obslužný program robocopy může vytvořit úplnou kopii (zrcadlení) zdrojového adresáře v cíli. Pokud je zdrojová složka prázdná, budou také vymazána všechna data v cílové složce. Vytvořte prázdnou složku C: \ Install \ test a pomocí argumentu / MIR zkopírujte obsah testovací složky do cílové složky (pokud název složky obsahuje mezery nebo azbuky, cesta musí být uzavřena v uvozovkách).
robocopy / MIR C: \ Install \ test "C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath"
Po provedení příkazu bude obsah adresáře C: \ Install \ MS SQL 2012 Express Edition 64 bitů \ verylongpath vymazán (nahrazen obsahem prázdného adresáře).
Dnes jsme tedy ukázali několik jednoduchých triků, které můžete použít při práci se složkami na souborových serverech obsahujících složky, jejichž délka cesty přesahuje limit 260 znaků.