1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

バッチファイルで、ディレクトリ内にある古いファイル・ディレクトリを見つけたい

Last updated at Posted at 2016-06-16

やりたいこと

バックアップの世代管理とかしたいときに
フリーソフトに頼らず、標準コマンドだけで行いたい
その第一歩として。。。

基本的すぎて面白くないかもしれません。ごめん寝

なにはともあれサンプルコード

sample1.bat
@ECHO OFF
SET DIR=X:\path\to\target\dir\
SET OLDER=

FOR /F "usebackq" %%a IN (`DIR /AD /O-D /B "%DIR%"`) DO SET OLDER=%%a

ECHO 最も古いディレクトリは、 %OLDER% です。

簡単な解説

  • SETで変数定義(と、必要であれば値代入)

  • %で囲むと変数呼び出し

  • DIRコマンド

  • /AD = Aで属性指定、Dでディレクトリを指定

  • /O-D = Oでソート順指定、-Dで日付の新しい順(古い順の逆)

  • /B = ファイル名・ディレクトリ名のみ表示

  • FOR文

  • /F = コマンドの出力結果を1行ずつ処理

  • usebackq オプション = コマンドをバッククォートで囲みたい

  • %%a = コマンドの出力結果が1行ずつ代入される。バッチファイルで使う場合は。%を2つ重ねないといけない。また、変数名は英字1文字でないといけない。

  • DO 以下のコマンド群が実行される

  • この場合は、PHPで言うとforeachのような挙動をする

※各コマンドの詳細は/?でヘルプ見て

つまり、ディレクトリ一覧を新しい順からナメていって、最後に評価したディレクトリ名が最も古い、ということ
DIRコマンドのスイッチを変えることで、対象をファイルにすることもできるし、最も新しいものを抽出することもできる

所感

バッチファイルのFOR文は初めて使った。
思った以上にいろいろできて、ゆめがひろがりんぐですね。

1
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?