もう使わなくなったバックアップファイルは、削除しておくとハードディスクの容量にも、精神衛生にもちょっと良いかも。
ただし、使う可能性のあるファイルを削除はしたくないので、一定期間以上編集しなかった、という条件で削除すると便利かと。
これを実現するコマンドが forfiles。
本日は、この forfiles の説明。
■パラメータ一覧
☆――――――――――――――――――――――――――
FORFILES [/P パス名] [/M 検索マスク] [/S]
[/C コマンド] [/D [+ | -] yyyy/MM/dd | dd]
パラメーター一覧:
● /P パス名
検索を開始するパスを示します。
既定のフォルダーは現在実行中のディレクトリ (.) です。
● /M 検索マスク
検索マスクによってファイルを検索します。
既定の検索マスクは '*' です。DOS で一般的に使うワイルドカード文字が使えます
● /S
サブディレクトリに対しても処理を行うように forfiles に指示します (例: "DIR /S")。
● /C コマンド
各ファイルの実行するコマンドを示します。
コマンドの文字列は二重引用符で囲んでください。
既定のコマンドは "cmd /c echo @file" です。
次の変数をコマンドの文字列に使用することができます
@file - フィルの名前を返します。
@fname - 拡張子なしのファイル名を返します。
@ext - ファイルの拡張子だけを返します。
@path - ファイルの完全なパスを返します。
@relpath - ファイルの相対パスを返します。
@isdir - ファイルの種類がディレクトリの場合は "TRUE"を、ファイルの場合は"FALSE" を返します。
@fsize - ファイルのサイズをバイトで返します。
@fdate - ファイルの最終更新日を返します。
@ftime - ファイルの最終更新時刻を返します。
コマンド ラインに特殊文字を使用する場合は、 文字を 16 進数コードで 0xHH 形式で (例: タブは 0x09) 指定してください。CMD.EXE の内部コマンドの前には "cmd /c" が必要です。
● /D 日付
最終更新日が指定された日かもしくはそれ以降 (+)、または指定された日またはそれ以前 (-) であるファイルを "yyyy/MM/dd" 形式を使って選択します。または、最終更新日が現在の日にちより "dd" 日あと、もしくは "dd" 日前であるファイルを選択します。有効な "dd"値は 0 から 32768 の間です。
指定がない場合は、"+" が既定で使用されます。
● /?
ヘルプまたは使用法を表示します。
――――――――――――――――――――――――――☆
■やってみる
ちょっとコマンドの説明だとわかりにくいので、一定期間以上編集されていない txt ファイルを削除する、というお題でやってみます。◇――――――――――――――――――――――――――
注意:以下のコマンドを実行するとファイルが削除されます。
もし削除されてしまっても、責任はおいかねますので自己責任でお願いします。
もし試しにやって見るときには、
cmd /c del ...
の代わりに
cmd /c echo hear is ...
みたいに、薬にも毒にもならないコマンドに書き換えてください。
――――――――――――――――――――――――――◇
たとえば、現在のフォルダ以下にいろんなファイルがあるとして、
forfiles /d -2016/12/12
は、2016/12/12 以前のファイルを一覧できます。
forfiles /d -2016/12/12 /m *.txt
は、2016/12/12 以前の txt ファイルが一覧されます。
さらに、このファイルを削除しようと思ったら
forfiles /d -2016/12/12 /m *.txt /c "cmd /c del @file"
※注意:このコマンドはファイルを削除します。
※お試しなら、"cmd /c echo hear is @file" にしておいてください。
で削除されます。
バッチファイルで使うときには、現在のフォルダが希望のフォルダだとは限らないので、希望のフォルダ(ここでは c:\usr)をパラメータに加えておきます。
forfiles /d -2016/12/12 /p c:\usr /m *.txt /c "cmd /c del @path"
※注意:このコマンドはファイルを削除します。
※お試しなら、"cmd /c echo hear is @path" にしておいてください。
"@" 以降の部分が @file から @path に変わっていることに注意してください。
@file はファイルのパス名を含まないので、c:\usr\abc.txt が見つかっても、コマンドを実行するときには、@file だと
cmd /c del abc.txt
にしかなりません。現在のフォルダが c:\usr ならこのコマンドは希望通りに機能しますが、別のフォルダが現在のフォルダであれば、これは期待通り機能しません。一方で、 @path を使うと
cmd /c del c:\usr\abc.txt
が実行されるので、かならず期待どおりになります。
"cmd /c"はおまじないだと思ってもらえればいいです。
詳しく知りたい方は、"cmd.exe パラメータ"で検索してみてください。
■更新日付による絞込
現在時刻を基準に、今から14日(2週間ですね)より古いファイルを探し出すには、forfiles /d -14
です。/d の後に "-14" のように "-" つきで指定します。
他にも
☆――――――――――――――――――――――――――
/d +yyyy/mm/dd
yyyy年mm月dd日以降に編集されたファイルを対象にします
/d +yyyy/mm/dd
yyyy年mm月dd日以前に編集されたファイルを対象にします
/d +nnn
今日を基準として、nnn日以降に編集されたファイルを対象にします
※未来に編集されたファイルって…?
/d -nnn
今日を基準として、nnn日以前に編集されたファイルを対象にします
――――――――――――――――――――――――――☆