PowerShell でフォルダ内の”それぞれ”最新ファイルを取得したい。

投稿者: Anonymous

PowerShellでフォルダ、ファイル操作のスクリプトを書いているのですが、賢い書き方をご存じであればご教授ください。

あるフォルダの中には以下のようなファイルが存在します。

Test-A001.txt 2017/04/18
Test-A001_old.txt 2017/04/10
Test-B001_最新.txt 2017/04/19
Test-B001.txt 2017/04/11
Test-C001.txt 2017/04/18
Test-C001_20170417.txt 2017/04/17

この中から、日付が新しい「Test-A|B|C」を取得したい。
取得したファイルリストは以下の通りです。

Test-A001.txt 2017/04/18
Test-B001_最新.txt 2017/04/19
Test-C001.txt 2017/04/18

よろしくお願いします。

解決

「Test-A|B|C」が固定長かつ先頭から始まることが保証されているなら、下記のコードで取れます。

$len = "Test-X".Length # グループ化する文字数(6文字)
$gp = ls | %{$_.Name.Substring(0, [Math]::Min($_.Name.Length, $len))} | group
$ss = $gp | %{ $s=$_.Name + "*"; ls -Filter $s | sort LastWriteTime -Descending | select -First 1 }
$ss

ファイル名の部分文字列をグループ化して、それぞれのグルーブに対して更新日付でソートをかけて最新のファイルを取得します。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *