Sort-Object
コマンドレットは、定期的にだけでなく、calculated propertiesだけではなく作業することができます。これにより、最初にForEach-Object
ループを通過させずにファイルを並べ替えることができます。このように:
$pattern = '.*_(\d{14}).*'
$datefmt = 'ddMMyyyyHHmmss'
$culture = [Globalization.CultureInfo]::InvariantCulture
Get-ChildItem $pathtofile | Sort-Object @{n='Timestamp';e={
$datestr = $_.Basename -replace $pattern, '$1'
[DateTime]::ParseExact($datestr, $datefmt, $culture)
}} | Select-Object -Last 1
私は通常$null
を使用すると、私にいくつかのケースでの誤差を与えたので、ParseExact()
のための3番目の引数としてInvariantCulture
定数ではなく$null
を使用することをお勧めします。
あなたのソースディレクトリには休息をソートする前Where-Object
フィルタでそれらを除外したいことがありますファイル名のパターンに一致しないファイルが含まれている場合:
Get-ChildItem $pathtofile | Where-Object {
$_.Basename -match $pattern
} | Sort-Object @{n='Timestamp';e={
$datestr = $_.Basename -replace $pattern, '$1'
[DateTime]::ParseExact($datestr, $datefmt, $culture)
}} | Select-Object -Last 1
感謝を。ファイル名に逆の順序があるにもかかわらず、これが最新のバージョンを決定する論理的順序であると思ったので、私は年、月、そして日付(そして忘れた時刻)を引用しました。 – JDGEEK
あなたのスクリプトを実行すると、 "3"引数を持つ "ParseExact"を呼び出す例外: "文字列によって表されるDateTimeは、Calendar System.Globalization.GregorianCalendarでサポートされている ではありません。 – JDGEEK
正確な形式がファイル名に一致していないようです。サポートされているフォーマットの配列を 'ParseExact'に渡して、さまざまなバリエーションをサポートすることができます。上のコードはあなたの質問の例では機能しますが、ファイルの残りの部分がどのように見えるかわかりません。 – Joey