【Windows】JPGを削除した後に残るRAWを一括削除するワンライナーとコマンドプロンプトのススメ

先日Nikon D5600を衝動買いしたので、今回はデジカメで撮った写真のファイル整理について一つ。

一眼レフやミラーレス一眼、比較的高級なコンデジ等ではRAW撮影のモードが搭載され、RAW+JPEGの同時記録にも対応している機種が多く存在します。
RAW+JPEGで保存された大量の写真から不要なものを選別する際、RAWではプレビューも重いのでJPEGを使って選別し削除を行う人はきっと多くいるはず。

その際、エクスプローラーではもちろんNikon純正のビューワーであるViewNX-iでもRAW+JPEGのセットでは削除してくれません。
JPEGだけ削除され同じ写真のRAWデータが残ってしまいます。

一眼ユーザーあるあるなのか?

調べてみると、この残ったいらないRAWデータを手作業で一つ一つ選択削除している方が一定数存在するようです。
少量なら良いですが数百枚なんて数になるともう拷問でしかありません。

たった一行のコマンドで解決できる

そのような拷問を受けずとも、この処理はRAW+JPEGが保存されているフォルダでコマンドプロンプトから以下のようなコマンド一行を実行するだけで簡単に解決できます。

for %a in (*.nef) do if not exist %~na.jpg del %a

このような、一行で必要な処理全てを記述したコマンドをワンライナーと言います。
ね? 簡単でしょ?

コマンドの内容についてちょっと解説

このコマンドを実行すると大雑把に以下のような処理が実行されます。

  1. フォルダ内の.nefファイル全てに対し、同名の.jpgファイルがあるか確認する。
  2. 同名の.jpgが無ければその.nefファイルを削除する。

.nefはNikonのRAWフォーマットファイル、.jpgはご存知JPEG画像ファイルです。
冒頭にも書きましたが、今回は先にJPEGを用いて写真の選別削除を済ませている状況を想定していますから、上記の処理によって不要なRAWデータを一括削除できるという訳です。
処理自体は単純ですから.nefと.jpgを書き換えることでRAWデータを先に削除した場合や、別メーカーのRAWデータにも簡単に対応できます。

コマンドが正常機能する条件

このコマンドが使える条件は以下のような感じです。
  1. 写真の保存先フォルダで実行する。
  2. .nefと.jpgが同じフォルダに保存されている。
  3. 同じ写真の.nefと.jpgは拡張子以外のファイル名が同一。

1はコマンドプロンプトに馴染みのない人であれば、まず作業フォルダ(カレントディレクトリ)という概念を理解する必要がありますが、詳しい情報は他所に幾らでもありますのでご自身で調べてください。
"cmd cd" みたいなワードで検索すればすぐにわかりやすい説明が見つかります。

2と3は注意しないと必要な写真がすべて削除されるケースもありえます。
具体的には、.nefしかない(.jpgが一つもない)フォルダで実行すれば.nefが全て削除されます。

失敗して削除されるのが不安、怖いという場合の為にもう少し安全に配慮したバリエーションを紹介します。

もう少し安全なバリエーション

mkdir raw & for %a in (*.nef) do if not exist %~na.jpg move %a raw

元のコマンドより少し長くなっています。
このコマンドで実行される処理は
  1. 「raw」フォルダを作成する
  2. フォルダ内の.nefファイル全てに対し、同名の.jpgファイルがあるか確認する。
  3. 同名の.jpgが無ければその.nefファイルを「raw」フォルダへ移動する。

.nefを削除するのではなく「raw」フォルダを作成しそこへ移動させるよう変更しています。
これならば万一失敗した場合でもRAWデータは削除されるわけではありませんので、復旧も容易に可能です。

ちょびっと便利な小技

ここまでの説明では大まかに
  1. コマンドプロンプトを起動し、
  2. 作業フォルダを移動し、
  3. コマンドを入力し実行。
という手順を踏んでいますが、これを毎回一からやるのは案外面倒です。
ちょっと詳しい人ならバッチファイルにする事を思いつくかもしれません。

しかしここではもう少し違う小ネタをご紹介しましょう。

1.エクスプローラーからコマンドプロンプトを呼び出せる

写真の保存先フォルダをエクスプローラーで開いたら、アドレスバーに cmd と入力しエンターキーを押してみて下さい。
開いていたフォルダを作業フォルダとして、コマンドプロンプトが起動するはずです。
これでスタートメニューからコマンドプロンプトを起動し、cdコマンドでフォルダを移動するなんて手間が無くなります。

2.なんならコマンドも直接実行できる

これまでのコマンドを少し改変する事で、アドレスバーから直接実行することが可能です。

#RAW削除版
cmd /c "for %a in (*.nef) do if not exist %~na.jpg del %a"
#RAW移動版
cmd /c "mkdir raw & for %a in (*.nef) do if not exist %~na.jpg move %a raw"

これらのコマンドを先ほどと同様にアドレスバーに入力しエンターキーを押すことで、即座にコマンドが実行されます。

何を隠そう、これをやりたいが為に今回はワンライナーにこだわっていたのです!

コマンドプロンプトは便利でおもしろいよ!

ここまでの例はコマンドプロンプトで出来る事のほんの一例にすぎません。
今回のような写真整理でもそうですが、大量のファイルを条件に合わせて分類する、削除するなんて用途ではとても軽快かつマウスのドラッグ&ドロップ操作などより断然正確に機能してくれます。
基本的なコマンドを覚えるだけでも出来る事がグッと増えます。
ぜひ、今回紹介したコマンドたちを分解してそれぞれの意味を調べてみて下さい。
会社でパソコン使う人なんか地味に役に立ちますから、ほんとほんと。

MacやUNIX/Linux系のシェルに比べてコマンドプロンプトはポンコツ扱いを受けていたりしますが、まだまだ捨てたもんじゃありませんよ!

コメント