特定のパターンに一致しないすべてのファイルを削除する-Windowsコマンドライン


12

コマンドラインからアイテムを削除するのはとても簡単です。

del /options filename.extension

ここで、フォルダー内の.jpgで終わらないすべてのファイルを削除するとします。どうすればよいでしょうか。

問題は、指定したすべての画像を.jpgに変換するソフトウェアがありますが、元の画像はそのままで、もう必要ありません。

異なるファイルタイプごとに複数のステートメントを実行するよりも、単一のステートメントを実行する方がはるかに効率的です。

回答:


14

私はこのようにします:

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

これにより、まずすべてのJPGファイルが読み取り専用になり、他のすべてが削除され(読み取り専用ファイルは自動的にスキップされます)、次にJPGファイルが再び書き込み可能になります。


チャンピオンのように働いた。注:/sサブディレクトリにファイルを再帰的に含めるには、各行に追加するだけです。
チャックウィルバー

9

それは実際には非常に簡単です。

forファイルを反復処理して、拡張子を探す必要があります。

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

トリックを行う必要があります(ここにコードを記述)


感謝しますが、それだけで使用しているマップに依存します。
KdgDev 2009

4
地図?
ジョーイ

.jpgではなく.jspではなく.xmlではない場合、delとはどうすればいいですか?
user1164061

1

Powershellによる救助
Windows 7/8の時代には、古き良きコマンドラインの後継機です。

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

DelはのエイリアスですRemove-Item。recurse、include、exclude、filterなどのオプションがあります(RegExに使用)

\*特定のフォルダーにファイルを含めるには、追加する必要があります


CMDプロンプトから、この作業をする必要があります:PowerShell.exe -Command "&{Remove-Item C:\MyFolder\* -Exclude '*.jpg'}"
Iszi

注:PowerShellにはWin 7/8が付属しています。Windows XPまたはVistaの場合は、ダウンロードしてインストールする必要があります。
イッツィー14

1

私はそれがあなたの質問に直接答えているわけではないことを知っていますが、コンバータのオプションを見て、次のことを確認しましたか?

  1. オリジナル自体を削除できます

または

  1. .jpgを新しいフォルダーに書き込みますか?

私にはそうする直接的なオプションがありません。元のJPGであった場合、元のファイルを上書きします。ただし、他のすべては、それらのJPGが作成される間、ディスク上に残ります。
KdgDev 2009

@WebDevHobo-まあまあ、ヨハネスの提案で行きます。
ChrisF

0

私は、さまざまな深さの数百のディレクトリにあるおそらく20,000のファイルを含むWindows 7(NTFSボリューム)のディレクトリTREEで、拡張子「.mp3」を持たないすべてのファイルを見つける方法を探していました。不安、私は使用しました:

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

これは、DIRコマンド出力に関連するすべてを削除した後、.mp3と一致しないファイルをリストしました... 99%動作します...一致しないファイルが標準DIR出力のキーワードの1つに指定されていない限り-おそらく、DIRレポートのヘッダー/要約情報を少なくする方法がありますが、ほとんどの方法でこれを実現できたので、気にしませんでした。


どうやらここの投稿コードはいくつかの特殊文字を削除しています...ので、上記の「cd」コマンドは単独で行にあり、ターゲットルートディレクトリを指定し、最初の「find」コマンドは「<」DIR」を含む行を削除しました"(図を参照)それはdirコマンドの出力だからです-しかし、ここの投稿コードは、それが何らかのメタ命令であると考え、それを
削除

1
これを行うにははるかに簡単な方法があります:コマンドの/bフラグですdirdir /b現在のディレクトリ内のファイル名と拡張子のみdir /s /bをリストし、現在およびすべてのサブディレクトリ内のすべてのファイルの完全修飾名をリストします。ループのfind /v代わりに配管することはfor覚えておく必要のある素敵なタッチですが、で動作するとは思わないdel
ボブ

0

ファイル名に一致するすべてのファイルを削除する別の方法を以下に示します。forループリストのすべてのファイルと、ファイル名(ディレクトリ名なし)で一致しない場合。

for /r %f in (*) do if not %~nxf == abc.xml del "%f"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.