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

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


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

関連記事

no image

PowerShellで現在の日時を取得するコマンドレットGet-Dateの使い方

こんにちは、今日はPowerShellで現在の日時を取得するコマンドレットGet-Dateの使い方についてまとめていきます。 確認環境 PSVersion 5.1.18362.1110 Get-Dat …

no image

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

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

no image

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

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

no image

PowerShellで別ウィンドウにテーブル出力するコマンドレットOut-GridViewの使い方

こんにちは、今日はPowerShellで別ウィンドウにテーブル出力するコマンドレットOut-GridViewの使い方についてまとめていきます。 確認環境 PSVersion 5.1.18362.111 …

no image

PowerShellでクリップボードの値の取得と設定をする方法

取得 Get-Clipboard ファイルを選択している場合 Get-Clipboard -Format FileDropList 設定 Set-Clipboard 設定したい値 設定はClipでも可 …