Menghapus semua file yang tidak cocok dengan pola tertentu - baris perintah Windows

12

Menghapus item melalui baris perintah cukup mudah.

del /options filename.extension

Sekarang, misalkan saya ingin menghapus semua file yang tidak diakhiri dengan .jpg di folder, bagaimana saya melakukannya.

Masalahnya adalah, saya memiliki perangkat lunak yang mengubah semua gambar yang ditentukan menjadi .jpg, tetapi meninggalkan aslinya, yang tidak saya perlukan lagi.

Akan jauh lebih efisien untuk mengeksekusi pernyataan tunggal, dibandingkan dengan melakukan banyak pernyataan untuk setiap jenis file yang berbeda.

KdgDev
sumber

Jawaban:

14

Saya akan melakukannya seperti ini:

attrib +r *.jpg
del /q *
attrib -r *.jpg

Ini pertama-tama akan membuat semua file JPG hanya-baca, menghapus semua yang lain (itu akan secara otomatis melewati file read-only), dan kemudian membuat file JPG dapat ditulisi lagi.

bobbymcr
sumber
Bekerja seperti jagoan. Catatan: cukup tambahkan /ske setiap baris untuk secara rekursif menyertakan file dalam subdirektori.
Chuck Wilbur
9

Itu sebenarnya cukup mudah.

Anda harus formengulangi file dan kemudian mencari ekstensi:

for %f in (*) do if not %~xf==.jpg del "%f"

harus melakukan trik (kode di sini ).

Joey
sumber
terima kasih, tetapi itu saja tergantung pada peta yang saya gunakan.
KdgDev
4
Peta?
Joey
Bagaimana saya mengatakan jika tidak .jpg dan bukan .jsp dan bukan .xml lalu del?
user1164061
1

Powershell untuk menyelamatkan
Dalam masa Windows 7/8 itu adalah penerus dari baris perintah lama yang baik

Del C:\myFolder\* -exclude '*.jpg'

Deladalah alias untuk Remove-Item. Ini memiliki beberapa opsi seperti pengulangan, sertakan, kecualikan, dan filter (gunakan ini untuk RegEx)

Anda harus menambahkan \*untuk memasukkan file dalam folder yang diberikan

nixda
sumber
Dari prompt CMD, ini seharusnya berfungsi:PowerShell.exe -Command "&{Remove-Item C:\MyFolder\* -Exclude '*.jpg'}"
Iszi
Catatan: PowerShell hadir dengan Win 7/8. Untuk Windows XP atau Vista, Anda perlu mengunduh dan menginstalnya.
Iszi
1

Saya tahu ini tidak menjawab pertanyaan Anda secara langsung, tetapi apakah Anda sudah melihat opsi pada konverter Anda untuk melihat apakah:

  1. Itu dapat menghapus aslinya sendiri

atau

  1. Tulis file .jpg ke folder baru?
ChrisF
sumber
Saya tidak memiliki opsi langsung untuk melakukannya. Apa yang akan dilakukan adalah menimpa yang asli jika itu adalah JPG untuk memulai. Tetapi semua yang lain tetap di disk saat JPG dari mereka dibuat.
KdgDev
@ WebDevHobo - oh well, aku akan pergi dengan saran Johannes kalau begitu.
ChrisF
0

Saya sedang mencari cara untuk menemukan semua file yang TIDAK memiliki ekstensi ".mp3" di direktori TREE pada Windows 7 (volume NTFS) yang berisi sekitar 20.000 file di beberapa ratus direktori dari berbagai kedalaman ... jadi setelah sedikit angst, saya menggunakan:

cd <theplace>
dir /S | find /V "<DIR>" | find /V "Total" | find /V "bytes" | find /V "Directory" | find /V "Volume" | find /V ".mp3" | more /S

ini mencantumkan file yang tidak cocok dengan .mp3 setelah menghapus semua yang berhubungan dengan output perintah DIR ... 99% berfungsi ... kecuali file yang tidak cocok bernama salah satu kata kunci dalam output DIR standar - mungkin ada cara untuk membuat laporan DIR lebih sedikit info tajuk / ringkasan - tapi saya tidak repot karena ini yang paling banyak didapat di sana.

CaptPat
sumber
rupanya kode Posting di sini menghapus beberapa karakter khusus ... sehingga perintah "cd" di atas berada pada satu baris dengan sendirinya dan menentukan direktori root target, dan perintah "find" pertama menghapus semua baris yang berisi "<" DIR "> "(lihat gambar) karena itu adalah output dari perintah dir - tetapi kode pos di sini mungkin berpikir itu semacam meta-instructions dan
menghapusnya
1
Ada cara yang jauh lebih mudah untuk melakukan ini: /bbendera dirperintah. dir /bakan mencantumkan nama file dan ekstensi di direktori saat ini saja, dir /s /bakan mencantumkan nama yang memenuhi syarat dari semua file di subdirektori saat ini dan semua. Perpipaan find /vbukan forloop adalah sentuhan yang bagus yang harus saya ingat, tapi saya pikir itu tidak berhasil del.
Bob
0

Cara lain untuk menghapus semua file yang cocok dengan nama file ditunjukkan di bawah ini. Untuk loop daftar semua file dan jika TIDAK cocok dengan nama file (tanpa nama direktori).

for /r %f in (*) do if not %~nxf == abc.xml del "%f"
ajuffinger
sumber