Как да изтриете файл с дължина на пътя над 260 знака

Не е тайна, че 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 знака.

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

Това ограничение също не се прилага за мрежовия достъп на потребителите до файлове чрез 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 знака.