サポンテ 勉強ノート

サポンテの勉強ノート・読書メモなどを晒します。

正規表現に一致する名前の最新ファイルを開く【Windows/PowerShell】

はじめに

 サポンテは特定のフォルダに、日付ファイル名の日誌のようなものを作っています。気付いたことがあったらすぐ書き記しているのですが、その都度エクスプローラーでフォルダまで移動してファイルを開くのが煩わしく感じます。

 どうせ最新のファイルだけ開ければいいので、フォルダから最新のファイルを開くスクリプトにしようと思いました。

ついでに

 そのような使い方をしているフォルダはいくつかあるので、正規表現でファイル名を指定できるとさらに便利でしょう。ファイル名に日付文字列をつけて管理する手法は JTC で多用されているので、共有すれば他の人の役に立つかもしれません。

使い方

 スクリプトの第一引数にフォルダまでのパスを、第二引数にファイル名の正規表現を指定します。二重引用符は、PowerShell によって変数展開などがされてしまうため正規表現の部分は一重引用符でくくります。

REM 使い方
powershell -ExecutionPolicy Bypass recent_file_open.ps1 "C:\Path\To\Dir" 'Dialy\d{8}\.txt'

スクリプト

# 起動引数を取得する
Param(
    [String]$Dir,
    [String]$Pattern
    )
    
# ファイル一覧を取得する
$files = Get-ChildItem -Path $dir

# 正規表現にマッチするファイル(群)を取得する
$matchFiles = New-Object 'System.Collections.Generic.List[object]'

foreach ($files in $files) {
    if ([regix]::IsMatch($file, $Pattern)) {
        $matchFiles.Add($file)
    }
}

# ファイル作成日時の降順でソートして最新のファイルを取得する
$recentFile = ($matchFiles | Sort-Object -Descending CreationTime | Select-Object -First 1)

# その最新のファイルを開く
Invoke-Item (Join-Path -Path $Dir -ChildPath $recentFile)