2019年12月22日日曜日

0 バイトのファイルを削除する

もろもろのファイル処理をバッチファイルで行っていると、稀に処理に失敗して 0 バイトのファイルが残ることがあるのですが、0 バイトのファイルだけを綺麗に除去するのは実は結構面倒くさい……ような気がします。

以前、for 文を使ってこんなコマンドを書いたことがありました。

for /r C:\hoge %%f in (*.jpg) do if %%~zf==0 del %%f

これでも多分動くと思うのですが、なにしろ for 文は謎作法が多く(個人の感想です)、いざと言う時にすぐにこの書式を思い出せないのが難点です。

ただ、もっと簡単な方法があったことに今頃気づきました。

robocopy C:\hoge\ C:\hoge_backup\ /S /MAX:1 /DCOPY:DAT /MOVE

MAX:1 オプションを指定することで、「1 バイト以下」のファイルが対象となり、MOVE オプションを指定することで「C:\hoge_backup」にファイルが移動されます(結果的に C:\hoge 配下のファイルは削除されます)。

これだったら、おなじみの robocopy コマンド一発で行ける上に、万一の事故の際にもファイルが移動されるだけなので安心です。

Blogger の小枝