Cara menghapus file dengan panjang jalur lebih dari 260 karakter

Bukan rahasia lagi bahwa Windows Explorer, seperti kebanyakan aplikasi Windows lainnya, termasuk PowerShell, tidak dapat bekerja dengan objek sistem file dengan sarang folder yang dalam., panjang jalur yang melebihi 260 karakter. Selain itu, pembatasan ini hanya ada di tingkat aplikasi, dan sistem file NTFS sendiri mendukung jalur file hingga 32767 karakter.


Pembatasan ini diberlakukan oleh perpustakaan. Win32 API, dengan panjang jalur maksimum 260 karakter (MAX_PATH = 260) Secara umum, jalur dibentuk dari elemen-elemen berikut:  [C: \] + [path_of_256_characters] + [], dan panjang maksimum satu direktori / file di NTFS adalah 255 karakter di Unicode. Saat menggunakan fungsi API unicode, dimungkinkan untuk menggunakan path ke 32767 karakter. Karena ini, banyak program pihak ketiga (pengelola file populer yang sama, misalnya Jauh dan Total komandan) memproses file / folder tanpa kesulitan, panjang jalur melebihi 260 karakter.

Kiat. Anda dapat menyiasati keterbatasan Win32 API ini dan bekerja dengan nama file yang panjang dengan menggunakan format UNC path, yang menunjukkan path absolut ke file menggunakan awalan path extended-length \\? \. Misalnya, jadi \\? \ C: \ SomeLongPath \ LongNameFile.txt

Pembatasan ini juga tidak berlaku untuk akses jaringan pengguna ke file melalui protokol SMB (karena ini, struktur direktori dengan jalur panjang tidak jarang pada server file dengan data pengguna). Administrator yang melayani server ini tidak dapat mengelola (menghapus / memindahkan) file dengan jalur panjang melalui antarmuka standar Windows Explorer explorer. Saat mencoba membuat / menyalin file ke direktori tersebut, kesalahan muncul:

Jalur Tujuan Terlalu Panjang. Nama file akan terlalu panjang untuk folder tujuan. Anda dapat mempersingkat nama file dan mencoba lagi, atau mencoba lokasi yang memiliki jalur pendek

Program / dialog lain mungkin menunjukkan batasan dengan caranya sendiri..

Sangat lucu bahwa 2014 ada di luar jendela, dan kami masih berbicara tentang batas 260 karakter untuk panjang jalur maksimum di Windows ... Tetapi tampaknya tidak ada perubahan besar yang diharapkan dalam waktu dekat, dan bahkan dalam Windows 10 Technical Preview yang sepenuhnya pembatasan ini. masih ada.

Pada artikel ini kami akan menunjukkan bagaimana di Windows Anda dapat bekerja dengan file yang jalurnya melebihi 260 karakter. Dalam hal ini, tugas kami adalah menghapus direktori yang berisi file dengan panjang jalur yang panjang.

Saat Anda mencoba menghapus direktori seperti itu dari Explorer, muncul kesalahan:

Nama file akan terlalu panjang untuk folder tujuan. Anda dapat mempersingkat nama file dan mencoba lagi, atau mencoba lokasi yang memiliki jalur pendek.

Powershell juga gagal menangani direktori dan file dengan jalur besar melebihi 260 karakter. Ketika mencoba menghapus direktori dengan file-file seperti itu (C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath), sebuah kesalahan muncul:

Remove-Item. \ Verylongpath -Recurse

Remove-Item: Path yang ditentukan, nama file, atau keduanya terlalu panjang. Nama file yang sepenuhnya memenuhi syarat harus kurang dari 260
karakter, dan nama direktori harus kurang dari 248 karakter.
Pada baris: 1 char: 1
+ Remove-Item. \ Verylongpath -Recurse
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: WriteError: (C: \ Install \ MS S ... it \ verylongpath: String) [Remove-Item], PathTooLongExcepti
pada
+ FullyQualifiedErrorId: RemoveItemIOError, Microsoft.PowerShell.Commands.RemoveItemCommand

Opsi paling sederhana (yang sebenarnya disarankan di jendela kesalahan) adalah mempersingkat nama folder induk, mengurangi total panjang jalur (tetapi tidak selalu berlaku).

Pilihan lain adalah membuat tautan simbolis ke bagian jalan, sehingga mempersingkat panjang jalur total:

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

Selanjutnya, operasi file harus dilakukan dengan direktori tempat tautan simbolik diberikan..

Opsi lain yang menyerupai bekerja dengan tautan simbolis adalah memetakan folder masalah ke disk virtual (dalam contoh kami X :), dengan demikian juga mengurangi panjang lintasan:

Subst X: "C: \ Instal \ MS SQL 2012 Express Edition 64 bit \ verylongpath"

Sekarang Anda dapat bekerja dengan data pada drive X:, jalur file di mana tidak akan melebihi batas. Setelah menyelesaikan pekerjaan, Anda dapat menghapus disk virtual:

Subst X: / d

Tetapi bagi saya pribadi, untuk tugas menghapus data dalam situasi seperti itu, saya suka fitur-fiturnya robocopy.exe, yang mendukung jalur panjang.

Menggunakan opsi / MIR, utilitas robocopy dapat membuat salinan lengkap (mirror) dari direktori sumber di target. Dan, jika folder sumber kosong, semua data di folder tujuan juga dihapus. Buat folder kosong C: \ Instal \ test dan menggunakan argumen / MIR, salin konten folder tes ke folder target (jika nama folder berisi spasi atau karakter Cyrillic, path harus dilampirkan dalam tanda kutip).

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

Setelah perintah dijalankan, isi direktori C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath dihapus (diganti dengan isi direktori kosong).

Jadi, hari ini kami menunjukkan beberapa trik sederhana yang dapat Anda gunakan saat bekerja dengan folder di server file yang berisi folder yang panjang jalurnya melebihi batas 260 karakter.