3テラバイト

プログラム関連備忘録サイト。主にゲーム。

PowerShell

PowerShellでエクスプローラーと同じ並びでファイルのリストを取得する

投稿日:2021年1月16日 更新日:

こんにちは、今日はPowerShellでエクスプローラーと同じ並びでファイルのリストを取得する方法についてまとめていきます。

確認環境

PSVersion 5.1.18362.1110

ファイル一覧取得

現在のディレクトリに以下のようなファイルがあった場合、エクスプローラーでは数値の昇順、降順で並び替えられます。

  • 0_Test.txt
  • 1_Test.txt
  • 2_Test.txt
  • 11_Test.txt

これをGet-ChildItemコマンドレットで取得すると、

$files = Get-ChildItem -File -Recurse -Include "*.txt"
foreach ( $file in $files )
{
    $file
}

以下のような並びになります。

    ディレクトリ: C:\Users\santerabyte\Workspace


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2021/01/16     22:30              0 0_Test.txt
-a----       2021/01/16     22:30              0 11_Test.txt
-a----       2021/01/16     22:30              0 1_Test.txt
-a----       2021/01/16     22:30              0 2_Test.txt

これをPowerShell側でもファイル名先頭の桁数が異なる数値の大小で並び替えられるようにします。

ファイルのソート

以下のようにSort-Objectコマンドレットを用いてソートを行います。

$files = Get-ChildItem -File -Recurse -Include "*.txt" | Sort-Object { [regex]::Replace($_.BaseName, '\d+', { $args[0].Value.PadLeft(2) }) }
foreach ( $file in $files )
{
    $file
}
    ディレクトリ: C:\Users\santerabyte\Workspace


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2021/01/16     22:30              0 0_Test.txt
-a----       2021/01/16     22:30              0 1_Test.txt
-a----       2021/01/16     22:30              0 2_Test.txt
-a----       2021/01/16     22:30              0 11_Test.txt

処理内容

$files = Get-ChildItem -File -Recurse -Include "*.txt" | Sort-Object { [regex]::Replace($_.BaseName, '\d+', { $args[0].Value.PadLeft(2) }) }

上記の部分では、Get-ChildItemコマンドレットで取得した.txtファイルの一覧をパイプでSort-Objectコマンドレットに渡し、連続する数値の部分(0_Test.txtであれば0、11_Test.txtであれば11の部分)を探し、その部分の左側に2桁になるように空白を挿入しています。

この値を元にソートすることにより

内部的に以下のようなファイル名でソートすることで「11_Test.txt」が最後に来ています。

  • 0_Test.txt
  • 1_Test.txt
  • 2_Test.txt
  • 11_Test.txt

リンク

Get-ChildItem (Microsoft.PowerShell.Management) – PowerShell | Microsoft Docs
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-7

-PowerShell


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

PowerShellでボリューム情報を取得するGet-Volumeコマンドレットの使い方

こんにちは、今日はPowerShellでボリューム情報を取得するGet-Volumeコマンドレットの使い方についてまとめていきます。 確認環境 PSVersion 5.1.18362.1110 Vol …

no image

PowerShellでカルチャー情報を取得するコマンドレットGet-Cultureの使い方

こんにちは、今日はPowerShellでカルチャー情報を取得するコマンドレットGet-Cultureの使い方についてまとめていきます。 確認環境 PSVersion 5.1.18362.1110 Ge …

no image

Windows10でPowerShellスクリプトをスケジュール実行する

こんにちは、今日はWindows10でPowerShellスクリプトを自動実行する方法についてまとめていきます。 自動実行設定 Windows10でPowerShellスクリプトを自動実行するには、タ …

no image

PowerShellでトースト通知を送る

確認環境 PSVersion 5.1.18362.1110 トースト通知を送る [Windows.UI.Notifications.ToastNotificationManager, Win …

no image

PowerShellでアイテムのプロパティを取得するコマンドレットGet-ItemPropertyの使い方

こんにちは、今日はPowerShellでアイテムのプロパティを取得するコマンドレットGet-ItemPropertyの使い方についてまとめていきます。 確認環境 PSVersion 5.1.18362 …