Pertanyaan Cara menghapus direktori dengan path / nama terlalu panjang untuk penghapusan normal


Windows tampaknya memiliki batas panjang pada nama file ketika mencoba untuk menghapus, meskipun itu tidak akan mencegah file-file tersebut dibuat.

Proses pembuatan kami menciptakan sejumlah file sementara (banyak build dari WSDL) yang melanggar batas ini. Script semut kami entah bagaimana bisa menghapusnya ketika melakukan bersih, tapi kadang-kadang saya perlu menghapus direktori workarea (di mana semua file temp pergi) tanpa benar-benar melakukan bersih penuh dari semut.

Ini adalah kesalahan yang sama pertanyaan ini, tetapi jawaban di sana tidak benar-benar bekerja untuk saya karena saya berurusan dengan direktori, bukan file, dan saya tidak selalu tahu file atau subdirektori tertentu apa yang menyebabkan masalah. Dan saya mencoba untuk menghindari proses manual (selain memicu satu perintah) untuk benar-benar menghapusnya.

Jika saya mencoba menghapus direktori dari Explorer, saya mendapatkan kesalahan

Cannot delete [file name]: The file name you specified is not valid or too long.  
Specify a different file name

Mencoba Remove-Item di PowerShell memberikan kesalahan berikut:

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item  <<<< -force -Recurse <directory>

Apakah ada yang tahu alat apa pun atau cara mudah untuk mengatasi kesalahan penghapusan ini tanpa harus mencari file masalah secara manual dan memindahkan / mengganti nama mereka?


349
2017-12-03 19:23


asal


Saya menemukan solusinya tepat sebelum memposting pertanyaan ini, tetapi karena orang lain mungkin mengalami hal ini, saya memutuskan untuk mempostingnya sehingga mereka dapat menemukan solusi yang saya temui. - Herms
Oh saya tahu, tetapi umumnya ketika saya melakukan hal-hal seperti ini saya meninggalkan pertanyaan "tidak terjawab" untuk sementara waktu untuk melihat apakah ada orang lain yang memiliki solusi yang lebih baik. - Herms
Oleh Jauh solusi paling sederhana: youtube.com/watch?v=qQTyTprFAOg - TaW
menggunakan Ubuntu atau lainnya Linux Bootable CD kita bisa boot komputer kita Ubuntu atau OS lain untuk sementara. Kemudian kita dapat memilih folder dan kita dapat menghapusnya dengan mudah. - kelum priyadarshane
Pertanyaan yang lebih tua ini memiliki beberapa jawaban yang menarik juga: superuser.com/questions/45697/… - AdamV


Jawaban:


Menggunakan 7-Zip Manajer File untuk menghapusnya. Menggunakan BergeserDEL menyembunyikan File Manager 7zip (jika tidak Windows mencoba untuk pindah ke Recycle Bin yang akan gagal lagi).


392
2017-12-03 19:48



Terima kasih - ini menyingkirkan pohon dir yang sedikit rekursif dan terlalu dalam untuk del / rmdir / rm / explorer untuk menghapus - Martin Beckett
bekerja hebat menggunakan shift + Del - 7zip tidak dapat mengirim file yang panjang-pathed ke recycle bin .... - cori
Beri +1 7zip. Anda harus menavigasi ke folder, dan KEMUDIAN digunakan shift + Del seperti kata @cori. Jika Anda memilih Delete pilihan dari menu konteks, itu WILL gagal di sana. shift + Del saya t! - Urda
7zip tidak berfungsi untuk win7 64, jadi linux melakukannya. - Erik Friesen
Saya upvote ini karena dengan 7zip Anda dapat menghapus juga menghapus folder yang berisi folder bersarang panjang di dalamnya. Punya masalah saya dengan folder node_module yang berisi omong kosong ton folder bertingkat dan saya tidak dapat menghapusnya. 7zip tetap dari folder dasar dengan sempurna. +1 - Gruber


Tidak ada jawaban lain (gratis) di sini yang berhasil untuk saya, tetapi saya menemukan satu di situs lain:

rimraf <dir>

rimraf adalah Node.js paket, jadi Anda harus menginstal Node.js yang termasuk npm. Kemudian Anda dapat menjalankan:

npm install -g rimraf

Maka Anda bisa berlari rimraf dari baris perintah.

Saya menemukan solusi ini karena npm sendiri yang menyebabkan masalah ini karena cara sarang ketergantungan.

Ngomong-ngomong, rimraf mendapatkan namanya dari perintah UNIX rm -rf, yang secara rekursif menghapus file dan folder.


307
2017-07-04 06:23



Mencoba banyak cara. Ini berfungsi dengan sempurna! - Duckegg
Jawaban terbaik dari semua :) ya mudahnya - Al-Mothafar
Ini harus menjadi jawaban yang diterima. - NINCOMPOOP
Solusi Anda bekerja tetapi ini sangat f ## k-up yang saya harus menggunakan modul js simpul untuk menghapus folder js modul node ... Saya tidak ingin hidup di planet ini lagi - Benoit P
Node menciptakan masalah di tempat pertama bagi saya jadi ... menarik ... bahwa mereka juga punya solusi. - Eric J.


Ada tidak perlu menginstal program apa pun untuk mengatasi masalah ini.

Masalah ini mudah diselesaikan dengan menggunakan robocopy, diprainstal sejak Windows Vista, diluncurkan pada 2006.

Sebagai contoh, rmdir /S /Q <dir> telah dilaporkan gagal dalam beberapa kasus. Tidak perlu menggunakan 7zip atau alat pihak ketiga lainnya. Powershell terlalu berlebihan. Cygwin dapat berfungsi, tetapi Anda mungkin belum menginstalnya. Jadi, mari kita fokus robocopy

Idenya adalah untuk

  1. menggunakan robocopy untuk menyalin + diperbarui
  2. dari sebuah folder kosong baru 
  3. ke folder yang ingin Anda hapus, target.

Setelah keluar robocopy, direktori target akan kosong juga.

Instruksi ini untuk baris perintah. Buka saja pencarian di Windows, ketik cmd dan tekan Enter.

Katakanlah folder yang ingin kita hapus, targetnya, adalah

C:\delete\this folder\with a very long name 

  1. Pertama buat direktori kosong, f.i. C:\emptyfolder.

    mkdir C: \ emptyfolder

  2. Salin + perbarui dari direktori kosong ke target, menggunakan opsi "/ purge"

    robocopy c: \ emptyfolder "C: \ menghapus \ folder ini \ dengan nama yang sangat panjang" / pembersihan

  3. Hapus direktori kosong. Anda tidak membutuhkannya lagi.

    rmdir c: \ blankfolder

Karena tidak ada file atau folder di direktori sumber (C:\emptyfolder), itu hanya menghapus file dan folder di bawah direktori target (C:\delete\this folder\with a very long name) secara rekursif!

  • Trik terakhir: Anda dapat menghindari menulis dengan tangan

    C: \ hapus \ folder ini \ dengan nama yang sangat panjang

    Dengan menyeret folder dari jendela Explorer dan menjatuhkan di jendela Terminal / cmd.

Hati-hati: File yang dihapus tidak akan pergi ke tempat sampah map! Setelah dihapus, file tidak dapat dipulihkan.

(Diambil dari "Jalan terlalu panjang? Gunakan Robocopy" oleh BVLANGEN)

PS: Saya menyadari jawaban ini ada di sini, kurang didaktik. Bagaimana cara menghapus file di Windows dengan nama file yang terlalu panjang? [duplikat]

Benoit ditambahkan:

Anda mungkin harus melalui proses ini lebih dari sekali untuk menyingkirkan semua file.


117
2018-03-03 16:45



Terima kasih tuan yang baik !! Ini harus menjadi jawaban yang diterima karena semua yang lain juga tidak berfungsi atau diperlukan a Alat pihak ketiga. :) - MickyD
Ini bekerja dengan sempurna ... tidak perlu menginstal apa pun (sejauh yang saya tahu) dan itu cepat. Ini harus menjadi jawaban yang diterima! - ksumarine
Ini menyimpan beberapa (atau semua) dari pohon direktori di bawah "c: \ deletefolder" (target dir). Pokoknya, menghapus semuanya dalam sekejap bagi saya (tebak file-file itu kecil) dan saya hanya harus secara manual <Del> "c: \ deletefolder", direktori anak telah dihapus tanpa masalah. Bekerja seperti pesona. +1, seharusnya jawaban yang diterima! :) - rld.
@ rld, tetapi apakah "deletefolder" ada sebelumnya? Kalau tidak, saya pikir itu harus kosong jika itu adalah direktori baru. Kalau tidak, itu berantakan. Saya bisa menambahkan langkah terakhir untuk "rmdir deletefolder". - hectorpal
@hectorpal 1. Saya memiliki sebuah pohon dengan sisa-sisa cadangan drive Windows C dari komputer lain, yang berhasil saya hapus kecuali untuk bagian yang sangat panjang, yaitu. "% USERPROFILE% / foo / very_long_dirname / vldn2 / vldn3 /(...)/ very_long_filename". 2 cd ~; mkdir empty; robocopy empty foo /purge 3. Yang tersisa dengan ~ / foo / maybe_something_deeper_too_cant_remember / dan tidak benar-benar membutuhkan waktu untuk menyelidiki lebih lanjut karena saya sudah kesal pada M $ karena tidak menghargai saya dan membuang-buang waktu saya, tetapi sederhana <Delete> di ~ / foo di explorer dihapus berhasil, setelah gagal tanpa henti (bahkan dengan kepemilikan) sampai robocopy. - rld.


Saya yakin saya telah menemukan cara untuk menghapusnya cmd. Awalnya saya mencoba del perintah, tetapi itu tidak berhasil. Lalu aku ingat rmdir. Melakukan hal berikut:

rmdir /S /Q <dir>

tampaknya telah berhasil.


79
2017-12-03 19:24



Tidak bekerja untukku. :( - Andrew Arnott
ingat untuk masuk ke cmd sebelum Anda mencoba menjalankan rmdir. - brianpeiris
Bagi mereka yang tidak dapat menggunakan solusi ini saya memiliki solusi alternatif yang bekerja untuk saya (dengan terlalu panjang path / nama file): Pindahkan file (s) / direktori ke C: \ untuk mempersingkat jalan, lalu hapus dari sana. - Anders Sandberg Nordbø
Adalah mungkin untuk memiliki direktori yang tidak dapat digunakan oleh solusi ini, yang dapat dihapus oleh 7-Zip. Saya baru saja mengalami ini terjadi pada saya. - SamStephens
Solusi ini mendapatkan hasil yang tidak konsisten. Tolong, jangan memilihnya. - hectorpal


Alat yang saya gunakan ketika saya memiliki masalah ini adalah FastCopy. Saya memilih Hapus semua dari dropdown, memilih direktori yang ingin saya hapus, dan mengklik Hapus semua.

FastCopy delete dialog screenshot

FastCopy adalah portable (tidak diperlukan instalasi), dan ada versi 32 bit dan 64 bit yang tersedia.


29
2017-11-25 20:22



Jika Anda mencari alat baris perintah, Anda bisa menggunakan alat kecil yang saya publikasikan di GitHub (github.com/epsitec/Tools-RecursiveDelete). - Pierre Arnaud
Saya memiliki kumpulan file / folder nested secara rekursif. Ini adalah satu-satunya solusi yang berhasil - Pierluigi
Ini bekerja untuk saya ketika, hal-hal baris perintah gagal, upaya 7zip gagal. dan bahkan dukungan Microsoft pun buntu! - Kit Ramos
Sama di sini - saya mulai menghapus file dengan 7zip, tetapi juga bertindak sangat aneh dan saya harus Shift + Delere setiap direktori beberapa kali berturut-turut untuk benar-benar menghapusnya, tetapi kemudian saya mencoba alat ini, dan bekerja seperti pesona . Meluncurkannya dua kali untuk menyingkirkan semua file. Terima kasih! - Artanis
Terima kasih, bagi saya juga satu-satunya solusi yang berfungsi, HEBAT !!!! - tim


Cygwin rm -rf bekerja dengan baik di jalur panjang!


24
2017-09-26 19:40



Cygwin bekerja untukku dengan sempurna! Baru saja melakukan -rm -rf dan semua file telah dihapus. - Ranhiru Cooray
Bekerja untuk saya juga di bawah GNU bash, versi 4.1.10 (4) -release - rjzii
Bekerja hebat ketika menjalankan dari jendela perintah Git Bash. Saya telah menginstal GitGui untuk itu. - Albo Best


Tanpa menginstal perangkat lunak tambahan yang dapat Anda gunakan subst perintah untuk membuat alias sementara ke direktori bernama panjang.

misalnya Jika Anda ingin menghapus folder C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted Anda dapat menggunakan perintah

subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"

lalu Anda dapat menghapus X:\folder to be deleted di Windows Explorer atau di command prompt dengan mudah. Untuk menghapus huruf drive sementara alias gunakan perintah

subst x: /d

23
2017-10-28 06:09



Saya mencoba semua jawaban lainnya (termasuk jawaban dari pertanyaan serupa lainnya) dan ini adalah satu-satunya yang akhirnya berhasil untuk saya. Dan sejauh ini yang tercepat. - glenneroo
Ini sejauh ini jawaban terbaik: sederhana, fitur built-in, tidak main-main dengan registri. Seharusnya jawaban yang diterima. - Kevin Roche
Mudah metode yang paling bersih dan paling mudah, terima kasih Kenneth. - Seth


Hanya drop dari Powershell menjadi perintah dengan menjalankan di bawah ini:

Cmd /C "rmdir /S /Q <dir>" 

21
2018-04-22 16:00



"Direktori tidak kosong". Ups. OP ingin menghapus folder yang tidak kosong. - leye0


Solusi Dentrasi adalah yang paling berhasil untuk saya, tetapi saya ingin memposting langkah-langkah spesifik dalam jawaban tingkat atas.

  1. Unduh dan pasang build stabil terbaru 7zip.
  2. Jalankan File Manager 7zip (7zfm.exe).
  3. Di File Manager 7zip, navigasikan sehingga Anda dapat melihat nama folder yang ingin Anda hapus (mis. Anda berada di folder induk).
  4. Tahan tombol Shift ke bawah.
  5. Klik "Menghapus"tombol, baik di keyboard Anda atau di toolbar File Manager 7zip; pastikan Anda masih menekan tombol Shift.
  6. Klik "baik"tombol; pastikan Anda masih menekan tombol Shift.

17
2018-06-25 14:19



Usaha yang bagus tapi masih tidak berhasil untuk saya dengan 10's k folder rekursif. Hanya rimraf yang berfungsi. - Julian Knight
@JulianKnight: Ya, pendekatan ini tidak berhenti bekerja untuk saya 100% dari waktu, juga. Saya hanya ingin menyebutkannya karena ini adalah salah satu proses yang lebih mudah, dan setidaknya bekerja sebagian waktu. Satu-satunya hal yang saya telah menemukan bahwa yang telah bekerja 100% dari waktu adalah pendekatan skrip modul Powershell + NTFSSecurity, yang saya jelaskan di bawah ini. IIRC rimraf gagal ketika dipanggil, yang adalah bagaimana saya masuk ke kekacauan ini di tempat pertama. Lihat thread Node.js ini untuk detailnya: github.com/nodejs/node-v0.x-archive/issues/… - Mass Dot Net
Ya, akan selalu ada masalah seperti itu. Sebenarnya itu adalah kode instalasi perpustakaan Arduino IDE yang membuat saya di (Java), saya tidak sengaja memilih folder yang berisi pustaka sebagai folder untuk menginstal pustaka dari dan di luar itu pergi! Saya membunuh proses segera setelah saya menyadari, tetapi sudah memiliki 10's of k folder (damn i7 / SSD!) Rilis utama berikutnya dari NPM dimaksudkan untuk membantu menyelesaikan banyak masalah instalasi perpustakaan dalam untuk Node karena dependensi harus dipenuhi dari struktur yang lebih datar. Masih saya sangat senang seseorang menempatkan saya pada rimraf - mudah dan gratis. - Julian Knight
@JulianKnight - Yap, satu atau dua hari yang lalu seseorang mengatakan kepada saya bahwa npm3 harus membantu meringankan masalah ini dengan mencegah struktur folder dependensi sangat berlapis. - Mass Dot Net
Tidak tahu apakah itu "mencegah" tetapi tidak memperlakukan dependensi bersarang lebih masuk akal sehingga jika aplikasi utama Anda membutuhkan perpustakaan X v1.0 dan perpustakaan Y membutuhkan Z yang juga memerlukan X v1.0, pustaka tingkat atas akan digunakan. Saat ini Z akan menginstal versi X-nya sendiri. - Julian Knight


Ada dua hal yang belum disebutkan dalam jawaban yang ada.

  1. Anda dapat menggunakan awalan jalur panjang tambahan untuk mengakses jalur panjang
  2. Dengan Windows 10, Anda dapat mengaktifkan dukungan jalur panjang untuk penggunaan umum - perhatikan bahwa tidak semua aplikasi akan bekerja dengan jalur panjang, Anda harus menguji perangkat lunak yang lebih lama. Hanya perangkat lunak dengan entri manifes yang sesuai yang akan dapat memanfaatkan ini.

Prefiks Jalan Panjang

Windows API memiliki fungsi khusus yang mendukung nama jalur Unicode hingga 32k karakter panjang (setiap elemen hingga 255 karakter panjangnya).

Hal ini sering salah disebut sebagai penamaan UNC tetapi tidak meskipun itu terkait.

Awalan yang digunakan untuk memberitahu API untuk menggunakan jalur Unicode panjang adalah \\?\ seperti dalam:

\\?\D:\very long path

Nama UNC biasanya digunakan ketika mengacu pada jalur di server jauh dalam formulir \\servername\path name\file name. Anda dapat menggabungkan ini dengan awalan jalur panjang sehingga: \\?\UNC\server\share

Perhatikan bahwa beberapa, ditulis dengan buruk tapi sayangnya cukup umum, aplikasi tidak mendukung jalur file UNC maupun awalan jalur panjang.

Referensi: https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath

Dukungan jalur panjang

Ini adalah opsi yang telah ditambahkan ke versi terbaru Windows 10. Tidak, pada saat penulisan, diaktifkan secara default karena memerlukan dukungan aplikasi spesifik. Menariknya, PowerShell memiliki dukungan built-in sehingga memungkinkan opsi ini akan memungkinkan jalur panjang untuk digunakan secara langsung dalam skrip PowerShell.

Anda dapat mengaktifkannya melalui editor Kebijakan Grup jika Anda memiliki versi Windows dengan itu. Atau Anda cukup menggunakan perubahan Registry berikut. Seperti biasa, harap cadangkan bagian registri yang Anda ubah sebelum melakukan apa pun.

  1. Menjalankan regedit.exe.
  2. Konfirmasikan permintaan UAC.
  3. Navigasikan ke kunci: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
  4. Buat atau ubah kunci LongPathsEnabled.
  5. Jika tidak ada, klik kanan pada Kebijakan dan pilih New> Dword (32-bit) Value dari menu.
  6. Set LongPathsEnabled untuk 1 untuk mengaktifkan.

Setiap aplikasi dengan entri manifes yang sesuai sekarang akan memiliki akses ke jalur panjang standar POSIX. Ini harus termasuk aplikasi Windows Store.

Referensi: https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/

PERBARUI 2017-04-09

@maoizm menunjukkan masalah dengan kunci registri di atas jadi saya lakukan lebih banyak menggali. Sepertinya Anda sekarang dapat mengatur dukungan nama file panjang dengan kunci sistem:

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)

Ini masih hanya berfungsi untuk aplikasi yang secara khusus diatur untuk menggunakannya (membutuhkan entri di manifest.xml aplikasi).

Anda juga harus mencatat bahwa Anda tidak dapat menggunakan nama path relatif dengan metode ini.


10
2017-09-09 10:52



{48981759-12F2-42A6-A048-028B3973495F}Machinebagian dari jalur registri akan berbeda di setiap komputer - mungkin tidak jelas bagi semua orang - maoizm
@maoizm - poin bagus, terima kasih untuk menyoroti itu. Silakan lihat pembaruan saya untuk alternatif jika menggunakan pembaruan W10 Anniversary atau yang lebih baru. - Julian Knight
Saya sedang menulis sebuah perpustakaan bernama FoundationIO, dan saya mencoba untuk membuat jalur panjang sebagai default, apakah ada fungsi yang dapat saya hubungi atau makro yang dapat saya atur untuk membuat dukungan jalur panjang secara otomatis diaktifkan untuk setiap pengguna perpustakaan saya? - MarcusJ
Hai Marcus, apakah ini perpustakaan Windows asli? Jika demikian, .NET memiliki dukungan yang diperlukan yang sudah ada sebagai bagian dari API Windows yang relevan - maaf bahwa saya tidak tahu detailnya karena saya bukan programmer .NET atau Win API tetapi detailnya harus dapat dicari di MSDN. - Julian Knight