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すると次のような結果になると思います。
左に緑でハイライトされている文字列がプロパティ名、右の白字がそのプロパティで得られる内容です。
つまり、バッチファイルでいう %~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すると次のような結果になると思います。
このように、プロパティ名からメンバーアクセス演算子 ( . (ドット))を用いて必要な情報を取り出すことに成功しました。
単に " . " で繋いで、 .BaseName や .Extension などと書くだけですね。
これで、今までバッチファイルで使っていた %~n1 や %~x1 などの各種プロパティ変数を Powershell スクリプト上で実現することが出来ました。
参考資料
Microsoft プロパティについて - Powershell
Microsoft オブジェクトの一部を選択する (Select-Object)
PowerShellを使ってサイズや更新日時、バージョンなど、ファイルのプロパティ情報を取得する方法
0 件のコメント:
コメントを投稿