Kako izbrisati datoteko z dolžino poti več kot 260 znakov

Ni skrivnost, da Windows Explorer, tako kot večina drugih programov za Windows, tudi PowerShell, ne more delovati s predmeti datotečnega sistema z gnezdenjem globokih map., dolžina poti, ki presega 260 znakov. Poleg tega ta omejitev obstaja samo na ravni aplikacij, sam datotečni sistem NTFS pa podpira poti datotek do 32767 znakov.


To omejitev knjižnica nalaga. Win32 API, z največjo dolžino poti 260 znakov (MAX_PATH = 260) Na splošno je pot oblikovana iz naslednjih elementov:  [C: \] + [path_of_256_characters] + [], največja dolžina enega imenika / datoteke v NTFS pa je 255 znakov v Unicode. Pri uporabi funkcij API-ja unicode je mogoče uporabiti pot do 32767 znakov. Zaradi tega je veliko drugih programov (na primer isti priljubljeni upravitelji datotek) Daleč in Skupaj poveljnik) brez težav obdeluje datoteke / mape, katerih dolžina poti presega 260 znakov.

Namig. To omejitev API-ja Win32 lahko zaobidete in delate z dolgimi imeni datotek z uporabo zapisa UNC poti, ki označuje absolutno pot do datoteke s predpono poti z daljšo dolžino \\? \. Na primer, torej \\? \ C: \ someLongPath \ LongNameFile.txt

Ta omejitev tudi ne velja za dostop do datotek do omrežja prek protokola SMB (zaradi tega strukture datotek z dolgimi potmi niso redke na datotečnih strežnikih z uporabniškimi podatki). Skrbnik, ki služi tem strežniku, ne more upravljati (brisati / premikati) datotek z dolgimi potmi skozi standardni vmesnik raziskovalca Windows Explorer. Ko poskušate ustvariti / kopirati datoteko v takšen imenik, se prikaže napaka:

Destinacijska pot je predolga. Imena datotek bi bila predolga za ciljno mapo. Ime datoteke lahko skrajšate in poskusite znova ali poskusite lokacijo, na kateri je skrajšana pot

Drugi programi / dialogi lahko na svoj način kažejo omejitev..

Smešno je, da je leto 2014 zunaj okna in še vedno govorimo o omejitvi 260 znakov za največjo dolžino poti v operacijskem sistemu Windows ... Vendar se zdi, da v bližnji prihodnosti ne pričakujemo večjih sprememb in celo v povsem svežem tehničnem predogledu Windows 10 to omejitev še vedno obstaja.

V tem članku bomo pokazali, kako lahko v sistemu Windows delate z datotekami, katerih pot presega 260 znakov. V tem primeru je naša naloga izbrisati imenik, ki vsebuje datoteke z veliko dolžino poti.

Ko poskušate izbrisati takšen imenik iz Explorerja, se prikaže napaka:

Imena datotek bi bila predolga za ciljno mapo. Ime datoteke lahko skrajšate in poskusite znova ali poskusite lokacijo, na kateri je skrajšana pot.

Powershell tudi ne ravna pravilno z imeniki in datotekami z velikimi potmi, ki presegajo 260 znakov. Ko poskušate izbrisati imenik s takšnimi datotekami (C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath), se prikaže napaka:

Odstrani-element. \ Zelo dolga pot -ponovite

Remove-Item: Navedena pot, ime datoteke ali oboje je predolgo. Popolnoma kvalificirano ime datoteke mora biti manjše od 260
znakov, ime imenika pa mora biti manjše od 248 znakov.
Na vrsti: 1 znak: 1
+ Odstrani-element. \ Zelo dolga pot -ponovite
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ KategorijaInfo: WriteError: (C: \ Namestite \ MS S ... it \ verylongpath: String) [Remove-Item], PathTooLongExcepti
naprej
+ FullyQualifiedErrorId: RemoveItemIOError, Microsoft.PowerShell.Commands.RemoveItemCommand

Najpreprostejša možnost (ki je v oknu z napako dejansko predlagana) je skrajšanje imena nadrejenih map, zmanjšanje skupne dolžine poti (vendar ni vedno uporabno).

Druga možnost je ustvariti simbolično povezavo na del poti in s tem skrajšati skupno dolžino poti:

mklink / d c: \ namestite \ povezava "C: \ Namestite \ MS SQL 2012 Express Edition 64 bit \ verylongpath"

Nato je treba datoteke izvajati z imenikom, do katerega je dodeljena simbolična povezava..

Druga možnost, ki spominja na delo s simbolično povezavo, je preslikavo problematične mape na virtualni disk (v našem primeru X :), s čimer se tudi zmanjša dolžina poti:

Podst. X: "C: \ Namestitev \ MS SQL 2012 Express Edition 64 bit \ verylongpath"

Zdaj lahko delate s podatki na pogonu X:, datoteke v katerih poti ne bodo presegale omejitve. Po končanem delu lahko navidezni disk izbrišete:

Podst. X: / d

Ampak osebno mi je pri brisanju podatkov v takih situacijah najbolj všeč možnosti robocopy.exe, ki podpira dolge poti.

Uporaba možnosti / MIR, pripomoček robobopy lahko ustvari popolno kopijo (ogledalo) izvornega imenika v cilju. Če je izvorna mapa prazna, se zbrišejo tudi vsi podatki v ciljni mapi. Ustvari prazno mapo C: \ Namestitev \ test in z argumentom / MIR kopirajte vsebino preskusne mape v ciljno mapo (če ime mape vsebuje presledke ali znake cirilice, mora biti pot zaprta v narekovajih).

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

Ko se ukaz izvede, se vsebina imenika C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath počisti (nadomesti ga vsebina praznega imenika).

Tako smo danes pokazali nekaj preprostih trikov, ki jih lahko uporabite pri delu z mapami na datotečnih strežnikih, ki vsebujejo mape, katerih dolžina poti presega omejitev 260 znakov.