Hapus paksa file dengan nama yang agak besar

62

Saya secara teratur menggunakan Node.js untuk mengelola dependensi untuk program yang saya tulis, bukan masalah besar. Hari ini saya berakhir dengan struktur folder seperti ini:masukkan deskripsi gambar di sini

Mencoba menghapus file apa pun bertemu dengan kesalahan ini:

Nama file sumber lebih besar dari yang didukung oleh sistem file. Coba pindah ke lokasi yang memiliki nama jalur lebih pendek, atau coba ganti nama menjadi nama pendek sebelum mencoba operasi ini.

Itu sudah di C: \, jadi itu tidak akan menjadi jauh lebih pendek.

Seiyria
sumber
apakah Anda tahu bagaimana struktur folder Anda sampai sebesar ini saya menemukan situasi yang sama ketika menginstal grunt.
eran otzer
1
@eranotzer dengan menggunakan npm.
Seiyria
saya tidak melakukan dependensi dalam paket Anda. di mana tulisan salah?
eran otzer
@eranotzer Ya. Karena cara kerja npm @ 2, setiap dependensi menyarangkan dependensi di dalamnya. Ini berarti bahwa rantai ketergantungan bisa lama sewenang-wenang. npm @ 3 sedang mencari untuk menyesuaikan perilaku ini.
Seiyria

Jawaban:

75

Gunakan alat Microsoft robocopy.exe.

  1. Buat folder kosong baru, mis c:\empty
  2. Kemudian salin folder kosong itu ke folder yang berisi nama file panjang yang Anda coba hapus, misalnya c:\myannoyingfolder. Lakukan ini seperti itu di command prompt:

    robocopy / MIR c: \ kosong c: \ myannoyingfolder

Flo
sumber
Karena ini adalah bagian dari alur kerja saya yang cukup sering, saya menemukan cara untuk mengintegrasikannya dengan shell Windows. Lihat jawaban saya di bawah ini. :)
toddmo
Catatan: perintah ini dapat memakan waktu beberapa detik atau bahkan beberapa menit untuk menyelesaikannya. Jadi, jangan khawatir dan biarkan ia melakukan keajaiban :-)
Adil Malik
Terima kasih, berhasil untuk saya. Saya harus memastikan saya juga membunuh proses (IIS) yang masih memegang salah satu file.
Slick Shinobi
Setiap kali saya mencoba membuka robocopy.exe, sebuah jendela berkedip sesaat dan kemudian tidak ada yang terjadi. Tolong bantu
Maulik Modi
29

oke, katakanlah Anda ingin menghapus pohon D:\very\long\path, Anda tidak perlu menggunakan alat apa pun seperti Robocopy.

  1. Buka direktori root drive yang berisi direktori yang tidak dapat Anda hapus
  2. Buat direktori dengan nama huruf tunggal, mis D:\a
  3. Arahkan ke dalam direktori yang ingin Anda hapus, dalam hal ini D:\very\long\path
  4. Pilih semua ( Ctrl+ A) dan Potong ( Ctrl- X)
  5. Arahkan ke folder yang baru saja Anda buat
  6. Tempel ( Ctrl- V)
  7. Sekarang, pindah ke direktori root dan hapus folder temp, dalam hal ini D:\a
  8. Kemudian kembali dan hapus direktori asli
gd73
sumber
2
Ini tidak berhasil untuk saya pada percobaan pertama untuk saya. Namun setelah mengulangi prosedur ini, beberapa level folder lagi di saya dapat menghapus semuanya.
abaldwin99
1
Solusi hebat, bekerja dengan sempurna. Sederhana dan efektif, terima kasih!
Caner Öncü
BAGUS!! bekerja seperti pesona !!! tidak ada alat lain yang dibutuhkan. Terima kasih!
Prasanth KC
Ini berfungsi dengan baik, dan saya akan menambahkan poin untuk ini, jika memilih file dari path tidak berfungsi, Anda dapat memilih folder di suatu tempat di tengah jalan panjang dan memindahkan folder itu, ke folder temp dan kemudian hapus keduanya dengan cara yang sama.
Narayana Nagireddi
4

Saya mulai mengetik masalah ini ketika mencoba banyak perintah, termasuk del /Fdan rmdir /S(serta menahan shift sambil menghapus untuk mencoba mem-bypass tempat sampah). Saya pikir itu rmdir /Sbenar - benar menghapus semua file sehingga saya bisa melanjutkan dengan menghapus folder yang merupakan node daun, kemudian naik pohon beberapa node sekaligus. Akhirnya saya membersihkan semuanya, tapi itu konyol.

Seiyria
sumber
4

Anda dapat mengintegrasikan fungsi ini ke dalam shell windows. Peningkatan saya pada jawaban Flo terlalu panjang untuk dikomentari.

Saya menambahkan Deleteperintah ke menu konteks Windows.

masukkan deskripsi gambar di sini

The delete.regberkas menambahkan entri registry untuk mengasosiasikan folder dengan robodelete.batfile batch.

delete.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Delete]

[HKEY_CLASSES_ROOT\Directory\shell\Delete\command]
"Extended"=""
@="\"D:\\Documents\\robodelete.bat\" \"%1\""

robodelete.bat

mkdir c:\empty
robocopy /MIR c:\empty %1
rmdir %1
rmdir c:\empty

Catatan : Anda mungkin perlu mengubah jalur di kedua file sesuai preferensi Anda.

PERINGATAN : Tidak ada cara untuk membatalkan perintah ini. Itu tidak menggunakan recycle bin dan tidak meminta Y / N untuk mengkonfirmasi sebelum menghancurkan folder untuk selamanya!

toddmo
sumber
Terima kasih atas peringatannya. Saya memerlukan ini dalam alur kerja saya juga tetapi saya ingin menghindari memiliki tombol nuklir di menu klik kanan saya yang tidak memiliki konfirmasi Y / N. Jika saya punya waktu, saya akan mencoba membuat penyesuaian itu dan menyarankan edit.
abaldwin99
1
@ abaldwin99, seperti ini mungkin stackoverflow.com/a/1807318/1045881
toddmo
4

Alat baris perintah sumber terbuka SuperDelete ( GitHub ) bekerja untuk saya setelah opsi lain gagal (Windows 10).

Joshua Fox
sumber
3

Cara terbaik untuk melakukan ini adalah dengan menggunakan robocopy, saya mendokumentasikan ini di blog pribadi saya untuk Anda ikuti:

http://clintboessen.blogspot.com.au/2014/05/how-to-delete-files-which-exceed-255.html

Clint
sumber
4
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah atau menghilang.
Andrea
0

Dalam banyak kasus, CD ke direktori dari command prompt dan menggunakan DEL akan berfungsi.

Jika tidak, Anda harus menggunakan nama Anda UP pohon direktori: ganti nama folder level terendah ke nama yang lebih pendek (mis. "A"), lalu nama folder yang lebih tinggi berikutnya, dan seterusnya, hingga total path cukup pendek. Dengan bekerja dari bawah ke atas, Anda selalu memanipulasi nama, yang memiliki jalur lengkap yang lebih pendek daripada file akhir.

Eugen Rieck
sumber
0
  • Buka command prompt administratif
  • net use z: c:\path
  • del z:\*.*

Tweak sesuai. Z: hanyalah sebuah huruf pengandar yang arbitrer untuk memetakan jalur yang menyinggung. Perintah penghapusan terakhir itu akan menghapus direktori WHOLE yang telah Anda petakan - jadi lebih spesifik sesuai kebutuhan.

Bradley Forney
sumber
2
Ini sangat berbahaya bagi pengguna non-listrik! Ada potensi untuk menghapus drive jika melakukan kesalahan.
Rudi Strydom
Setuju 100%. Pasti melanjutkan dengan hati-hati yang satu ini.
Bradley Forney
0

Cara yang bagus adalah memiliki Linux yang dapat di - boot pada flashdisk dan menghapus file tanpa masalah dari live CD os.

Dariusz Filipiak
sumber
-1

Saya juga memiliki Masalah yang Sama, dan saya menemukannya sendiri, Cukup Ubah Nama Folder Induk sesedikit mungkin. Ex. Jika Folder kita di " D " Berkendara seperti D: // Folder / Undelete_Folder . Hanya satu hal yang harus Anda lakukan adalah mengganti nama nama folder induk sekecil, Anda dapat mengganti nama menjadi " a ". maka lokasi Anda akan menjadi D: // a / Undelete_folde r. dan kemudian hapus Folder Induk.

Rohit R
sumber
Tidak hanya ini tidak selalu bekerja (bagaimana jika masih lebih besar, bahkan dengan pengurangan?), Tetapi saya menyebutkan secara eksplisit bahwa folder saya berada di root drive.
Seiyria
-2

Jika semuanya gagal

Buka Direktori final dalam string. Potong File Tempel kembali ke file 4 atau 5 di String. Maka [Shift] + [Delete] harus melakukan Trick.

Saya ragu untuk menjalankan perintah di atas pada command prompt yang ditinggikan karena saya menghapus File Pemulihan Tes dari cadangan DPM.

semoga ini membantu.

Andre
sumber
Ini kemungkinan tidak akan berhasil karena mereka masih memiliki jalur file yang panjang untuk operasi pemotongan.
Seiyria