やりたいこと
バックアップの世代管理とかしたいときに
フリーソフトに頼らず、標準コマンドだけで行いたい
その第一歩として。。。
基本的すぎて面白くないかもしれません。ごめん寝
なにはともあれサンプルコード
@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文は初めて使った。
思った以上にいろいろできて、ゆめがひろがりんぐですね。