Bagaimana cara menghapus folder yang namanya diakhiri dengan titik (".")?

90

Saya mendapat beberapa folder yang dibuat oleh malware yang namanya diakhiri dengan titik seperti C:\a.\atau C:\b.\, dll.

Saya menemukan solusi yang dapat menghapus folder tersebut dengan perintah rd /q /s "C:\a.\"tetapi jika saya memanggil win API RemoveDirectory, itu kembali ERROR_FILE_NOT_FOUND.

Dan saya hanya ingin tahu bagaimana menulis fungsi untuk menghapus direktori tersebut, terima kasih

Saya menguji sistem Windows XP SP3 saya sendiri seperti ini

buat folder C:\>mkdir a..\\\dan saya tidak dapat mengklik dua kali untuk mengakses folder ini. dan saya dapat menghapus dengan perintah rd /q /s "C:\a.\"

API sistem Windows apa yang rd /q /sdipanggil oleh perintah itu?

jerry.liu
sumber
Saya tidak percaya ini masih terjadi di Windows 10, oleh pembaruan Windows itu sendiri (tidak dapat menghapus Windows.old setelah memperbarui).
Sayuran Sialan

Jawaban:

149

Inilah solusi untuk masalah ini :

rd /s "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder."
Skilldrick
sumber
1
Pertanyaannya menginginkan fungsi API untuk menghapus folder, dan menyatakan itu dapat dihapus rd.
Jcl
4
Cukup adil - mungkin itu sebabnya jawaban ini tidak ditandai sebagai jawaban yang diterima, tetapi sangat berguna bagi pengguna yang terjebak dengan masalah yang sama tetapi di mana kita dapat menggunakan rd.
david.barkhuizen
2
Anda baru saja menyelamatkan saraf saya. Terima kasih! : D
Benny Neugebauer
8
Perhatikan bahwa ini hanya berfungsi dari CMD.exe BUKAN PowerShell
Lorne K
2
juga coba jalankan CMD.exedalam mode administrator juga jika tidak berfungsi di command prompt yang tidak ditinggikan
greg
63

Solusi: Saat Anda memanggil RemoveDirectory, pastikan Anda mengawali jalur dengan string " \\?\".


Penjelasan: Ini ada hubungannya dengan titik. Menurut MSDN, ada kasus tertentu di mana Anda mungkin tidak dapat menghapus file atau folder pada volume NTFS, khususnya ketika nama file tidak valid di ruang nama Win32 (itulah sebabnya Anda tidak dapat membuka file menggunakan metode normal di Windows Explorer).

Anda mungkin tidak dapat menghapus file jika nama file menyertakan nama yang tidak valid (misalnya, nama file memiliki spasi atau tanda titik atau nama file terdiri dari spasi saja). Untuk mengatasi masalah ini, gunakan alat yang menggunakan sintaks internal yang sesuai untuk menghapus file. Anda dapat menggunakan sintaks "\\? \" Dengan beberapa alat untuk mengoperasikan file ini, misalnya:
del "\\? \ c: \ path_to_file_that berisi spasi.txt di belakangnya"
Penyebab masalah ini mirip dengan Penyebab 4. Namun, jika Anda menggunakan sintaks Win32 khas untuk membuka file yang memiliki spasi tambahan atau tanda titik dalam namanya, spasi atau periode tambahan akan dihapus sebelum file aktual dibuka. Oleh karena itu, jika Anda memiliki dua file dalam folder yang sama bernama "AFile.txt" dan "AFile.txt" (perhatikan spasi setelah nama file), jika Anda mencoba membuka file kedua dengan menggunakan panggilan Win32 standar, Anda membuka file pertama sebagai gantinya. Demikian pula, jika Anda memiliki file yang namanya hanya "" (karakter spasi) dan Anda mencoba membukanya dengan menggunakan panggilan standar Win32, Anda membuka folder induk file sebagai gantinya. Dalam situasi ini, jika Anda mencoba mengubah pengaturan keamanan pada file ini, Anda mungkin tidak dapat melakukan ini atau Anda mungkin tiba-tiba mengubah pengaturan pada file yang berbeda.

(Sumber: http://support.microsoft.com/?kbid=320081 )

Cody Grey
sumber
Berhasil bagi saya untuk menghapus file dengan namanya diakhiri dengan ".". Terima kasih banyak !
AFakt
1
Ini bekerja beralih del ke rd sepertird "\\?\C:\Users\ahmed\Desktop\buggy."
guneysus
Ini berfungsi dengan baik pada cmd tetapi apakah ada yang setara untuk PowerShell? rddi pwsh adalah alias remove-itemyang tidak mendukung `\\? \`.
Kagami Sascha Rosylight
1
Tentu saja. Saya baru saja menggunakan PowerShell's rd untuk menghapus file seperti itu, dan itu bekerja dengan baik. Periksa ulang sintaks Anda.
SilverbackNet
Wow. Tersandung pada masalah ini ketika mencoba melakukan beberapa Pemrosesan Bahasa Alami pada dataset (setiap file dalam dataset diberi nama {IncrementalNumber}.), dan saya sangat bingung tentang mengapa skrip pemrosesan data saya gagal. Ini sekarang masuk akal, tetapi sepertinya perilakunya sangat tidak terduga sehingga dapat memiliki konsekuensi keamanan karena aplikasi yang salah menangani nama file yang diakhiri dengan spasi atau titik.
Spencer D
46

Saya telah memposting ini di SU dan saya memutuskan untuk mempostingnya di sini juga. Ini cara termudah dan tercepat dan termudah untuk mencapai ini. Saya sekarang menertawakan betapa sederhananya itu.

  1. Pasang WinRAR
  2. Ikuti prosedur Langkah demi Langkah dari gambar:
  3. masukkan deskripsi gambar di sini
  4. masukkan deskripsi gambar di sini
  5. masukkan deskripsi gambar di sini
  6. masukkan deskripsi gambar di sini

Saya sendiri telah menginstal WinRaR jadi saya memutuskan untuk mendemonstrasikan solusi di dalamnya.
Solusi ini juga dapat dilakukan dengan menggunakan 7zip.

Satu hal lagi yang harus saya sebutkan adalah, karena tampaknya masalahnya disebabkan oleh penggunaan windows explorer dan browser file lainnya (seperti browser file winrar itu sendiri, penjelajah ftp, dll.) Akan memperlakukan file ini seperti biasa.
Anda dapat mencoba menggunakan browser file apa pun dan cukup menghapus file-file itu dan tidak repot-repot mengarsipkannya! Bersulang!

AmirHossein
sumber
6
Solusi yang sangat kreatif!
Nosgoroth
8

Jika Anda melihat namanya adalah "a.", Tetapi nama sebenarnya adalah "a .."

Coba ini:

rd /q /s "C:\a..\"

Dan Anda dapat mencoba menjelajahi folder dengan kode ini:

for /f "tokens=3 delims=<>" %%a in ('dir /ad /x "C:\*" ^| findstr " a\.\.$"') do (
  for /f "tokens=1" %%b in ("%%a") do start "" "%%~fb"
)
neorobin
sumber
8

Jika Anda telah menginstal git (Anda bisa mendapatkannya dari sini ) maka itu sesederhana:

  1. Arahkan File Explorer ke lokasi di mana folder bermasalah berada.
  2. Menu konteks (tombol kanan mouse)> Git Bash Here.
  3. rm -rf Foldername./
Laurynas Lazauskas
sumber
rm: cannot remove ‘.bin’: Directory not empty
Hijau
@Green jika Anda memiliki izin untuk menghapus konten folder, -rfbagian tersebut harus menangani konten folder.
Laurynas Lazauskas
5

Saya menggunakan " WinRar ", RAR sederhana, prosesor ZIP. Anda dapat menggunakan editor nama file apa pun. Buka saja direktori tempat file Anda berada di WinRar dan pilih rename setelah mengklik kanan file / folder yang ingin Anda ganti namanya dan isi dengan nama baru.

Arya
sumber
Bagaimana itu bisa membantu?
Tavo
1
Membantu Anda menelusuri file / folder dan mengganti nama file menjadi apa pun ... dan selesai.
Arya
1
Ini benar-benar membantu saya; Saya telah menggunakan WinRar untuk mengekstrak banyak file, salah satunya termasuk folder yang diakhiri dengan titik. Windows tidak dapat menghapusnya atau benar-benar mengganti namanya, tetapi saya dapat mengganti namanya tanpa masalah di WinRar dan kemudian menghapusnya di Windows Explorer (win 10). Terima kasih!
Nick Mei
2

Coba gunakan program unlocker untuk menghapus file dan folder yang tidak dapat Anda hapus secara normal.

RyuuGan
sumber
3
Saya ingin tahu tentang bagaimana unlocker dapat melakukan ini!
jerry.liu
0

Gunakan perintah bash rm dari Ubuntu pada Windows 10

kreker
sumber
rm: cannot remove ‘.bin’: Directory not empty
Hijau
0

jika Anda ingin menyimpan file, ada opsi di bash juga.
Anda akan memerlukan paket Subsistem Windows untuk Linux (saya telah menginstal Ubuntu)

untuk menyimpan file. buka prompt perintah dan cd ke tempat file atau folder berada.
sekarang ketik " bash"
ini akan membuka bash di prompt. sekarang masuk mv '[folder or file you want to move]' '[new name (can include path)]'(masih ada lagi ke mv jadi jika Anda ingin membaca semua opsinya, gunakan 'man mv' ini akan membuka halaman manualnya (lalu gunakan q untuk kembali ke bash))
perintah mv adalah kependekan dari move, tetapi itu memiliki fungsi sekunder untuk mengganti nama sesuatu.
juga di bash gunakan 'tanda kutip tunggal' dan bukan "tanda kutip ganda" yang normal, karena bash mengharapkan 'tanda kutip tunggal'.

inilah sebuah contoh. asumsikan folder Anda bernama " data 1." terletak di c:\users(jadi path lengkap ke folder kesalahan adalah c:\users\data 1.
1. buka command prompt menggunakan metode apapun
2. masukkan cd c:\users
3. sekarang ketik bashbash beban ini di folder tempat Anda sebelumnya berada
4. terakhir ketik mv 'data 1.' 'data 1'
5. folder tersebut sekarang dapat diakses dan Anda dapat memilih untuk menghapusnya.

mer2329
sumber