Linuxのシェルならワイルドカードで指定したファイル名を変数に入れるのは、コマンド置換を使えば簡単だ。
// 現在のディレクトリで*.logに一致するファイルのうち最後1件のファイル名を変数filenameにセットする
filename=`find . -maxdepth 1 -name "*.log" -printf '%f\n' | tail -1`
これをWindowsバッチで行う方法はFORコマンドを使用する。
※FORコマンド参考:バッチとPowerShellで昨日の日付を取得する
FOR /F %%a in ('dir /B *.log') DO SET filename=%%a
dir /B
でdirコマンドの実行結果をファイル名の表示だけにできる。またFORコマンドでループしているため、変数filenameには最後に代入されたファイル名が入る。
今の例ではファイル名のうち一番最後のファイル名を変数にセットするというものだったが、ワイルドカードで一致する全ファイルを対象に処理をしたいのであれば、DOの後を()でくくってあげれば良い。
setlocal enabledelayedexpansion
FOR /F %%a in ('dir /B *.log') DO (
SET filename=%%a
echo !filename!
echo !filename!
)
Linuxで全ファイルを対象に処理をするには、 xargs -I {} -sh "コマンド群"
を使う。
find . -maxdepth 1 -name "*.log" -printf '%f\n' | xargs -I {} -sh "echo {}; echo {}"