Не е тайна, че Windows Explorer, както повечето други приложения за Windows, включително PowerShell, не може да работи с обекти на файлова система с дълбоко влагане на папки., дължина на пътя, която надвишава 260 знака. Освен това, това ограничение съществува само на ниво приложение, а самата файлова система NTFS поддържа файлови пътища до 32767 знаци.
Това ограничение се налага от библиотеката. API на Win32, с максимална дължина на пътеката 260 знака (MAX_PATH = 260). Като цяло път се формира от следните елементи: [C: \] + [path_of_256_characters] + [], и максималната дължина на една директория / файл в NTFS е 255 знака в Unicode. Когато използвате API на unicode функции, е възможно да използвате пътя към 32767 знаци. Поради това много програми на трети страни (същите популярни файлови мениджъри, например FAR и Общ командир) обработва файлове / папки без никакви затруднения, чиято дължина на пътя надвишава 260 знака.
Това ограничение също не се прилага за мрежовия достъп на потребителите до файлове чрез SMB протокол (поради това структурите на директории с дълги пътища не са рядкост на файлови сървъри с потребителски данни). Администраторът, обслужващ този сървър, не може да управлява (изтрива / премества) файлове с дълги пътища през стандартния интерфейс на Explorer Explorer. При опит за създаване / копиране на файл в такава директория се появява грешка:
Пътят до дестинацията е твърде дълъг. Името на файловете ще бъде твърде дълго за папката на местоназначение. Можете да съкратите името на файла и да опитате отново или да опитате местоположение, което има съкратен пътДруги програми / диалози могат да показват ограничение по свой начин..
Смешно е, че 2014 г. е извън прозореца и все още говорим за ограничение от 260 знака за максималната дължина на пътя в Windows ... Но изглежда, че не се очакват големи промени в близко бъдеще и дори в напълно свеж технически преглед на Windows 10 все още съществува.
В тази статия ще покажем как в Windows можете да работите с файлове, чийто път надхвърля 260 знака. В този случай нашата задача е да изтрием директорията, съдържаща файлове с голяма дължина на пътя.
Когато се опитате да изтриете такава директория от Explorer, се появява грешка:
Името на файловете ще бъде твърде дълго за папката на местоназначение. Можете да съкратите името на файла и да опитате отново или да опитате местоположение, което има съкратен път.Powershell също не успява да обработва правилно директории и файлове с големи пътища над 260 знака. При опит за изтриване на директория с такива файлове (C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath) се появява грешка:
Премахване-елемент. \ Verylongpath -Последване
Remove-Item: Указаният път, името на файла или и двете са твърде дълги. Напълно квалифицираното име на файл трябва да бъде по-малко от 260
символи и името на директорията трябва да бъде по-малко от 248 знака.
На ред: 1 char: 1
+ Премахване-елемент. \ Verylongpath -Последване
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: WriteError: (C: \ Install \ MS S ... it \ verylongpath: String) [Remove-Item], 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 bit \ verylongpath“
Сега можете да работите с данни на X: устройството, файловите пътища, в които няма да надвишават ограничението. След като приключите работата, можете да изтриете виртуалния диск:
Subst X: / d
Но лично аз най-много ми харесва задачата за изтриване на данни в подобни ситуации са възможностите robocopy.exe, която поддържа дълги пътеки.
Използване на опция / МИР, помощната програма за робокопие може да създаде пълно копие (огледало) на изходната директория в целта. И ако папката източник е празна, всички данни в папката на местоназначение също се изчистват. Създайте празна папка C: \ Инсталиране \ тест и използвайки аргумента / MIR, копирайте съдържанието на тестовата папка в целевата папка (ако името на папката съдържа интервали или букви на кирилица, пътят трябва да бъде затворен в кавички).
robocopy / MIR C: \ Install \ test "C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath"
След като командата се изпълни, съдържанието на директория C: \ Install \ MS SQL 2012 Express Edition 64 бит \ verylongpath се изчиства (замества се от съдържанието на празна директория).
И така, днес показахме няколко прости трика, които можете да използвате, когато работите с папки на файлови сървъри, съдържащи папки, чиято дължина на пътя превишава ограничението от 260 знака.