2022年6月25日土曜日

PowerShellによるD&Dしたファイル名などの取り出し方

PowerShellによるD&Dしたファイル名などの取り出し方

 先の投稿ではPowershellのスクリプトをD&Dで動かす方法を説明しました。
 今回は、D&Dしたファイルの名前、ファイルパス、拡張子などの取り出し方を説明していきます。

 バッチファイルではご存知のように、%~n1 でファイル名、%~dp1でファイル名を除いたパス、%~x1 で D&Dしたファイルの拡張子を取り出し、バッチファイルのスクリプト上に変数として使用できます。
 しかし Powershell においては、このように簡単に取り出すことはできません。

 そこで今回は、Get-ItemProperty と Select-Object を使って得られるプロパティ情報と、実際にプロパティの呼び出す方法を説明します。

ファイルから得られるプロパティ情報

下記のサンプルプログラムをそのままコピペし、D&Dで動かしてみてください。

#サンプル1
Get-ItemProperty  -LiteralPath $args |  Select-Object  *
 
pause
exit

 スクリプトの内容としては、 Get-ItemProperty を使って $args (D&Dした物を絶対パスとして引数にしている) のプロパティを Select-Object にパイプラインですべて流して表示しているだけに過ぎません。

 例として、 “D:\sample-pic.jpg” を上記のサンプルプログラムにD&Dすると次のような結果になると思います。
サンプル1の実行例

 左に緑でハイライトされている文字列がプロパティ名、右の白字がそのプロパティで得られる内容です。
 
 つまり、バッチファイルでいう %~n1 のように BaseName プロパティを選択したらファイル名が得られますし、%~x1 のように Extension プロパティを選択したら拡張子が得られることがわかりました。
 それでは、実際に得る方法を説明します。

プロパティの内容を取得

 また下記のサンプルプログラムをそのままコピペし、D&Dで動かしてみてください。
 スクリプトの内容としては、 Get-ItemProperty を使って $args のプロパティを、プロパティ名を使って呼び出しているだけです。

#サンプル2
Write-Host  "Name is " (Get-ItemProperty  -LiteralPath $args).BaseName
Write-Host  "Extension is " (Get-ItemProperty  -LiteralPath $args).Extension
Write-Host  "FullName(Fullpath) is " (Get-ItemProperty  -LiteralPath $args).FullName
Write-Host  "Last Access Time is " (Get-ItemProperty  -LiteralPath $args).LastAccessTime

pause
exit

 再度 “D:\sample-pic.jpg” を上記のサンプル2にD&Dすると次のような結果になると思います。
サンプル2の実行例

 このように、プロパティ名からメンバーアクセス演算子 ( . (ドット))を用いて必要な情報を取り出すことに成功しました。
 単に " . " で繋いで、 .BaseName や .Extension などと書くだけですね。

 これで、今までバッチファイルで使っていた %~n1 や %~x1 などの各種プロパティ変数を Powershell スクリプト上で実現することが出来ました。

参考資料
Microsoft プロパティについて - Powershell
Microsoft オブジェクトの一部を選択する (Select-Object)
PowerShellを使ってサイズや更新日時、バージョンなど、ファイルのプロパティ情報を取得する方法

0 件のコメント: