Powershellのスクリプトのファイル名とフォルダパスを取得する方法を説明します。
スクリプトの設置フォルダとファイル名のみとファイル名を含めたフルパスを取得できます。
スクリプトの設置フォルダを取得
Split-Path $MyInvocation.MyCommand.path で取得できます。
1 2 |
$CurrentDir = Split-Path $MyInvocation.MyCommand.Path echo $CurrentDir |
ただ、Powershell のVersionが3以降であれば、自動変数でも取得できるようです。
1 |
echo $PSScriptRoot |
スクリプトのファイル名のみを取得
$MyInvocation.MyCommand.Name で取得できます。
1 2 |
$Basename = $MyInvocation.MyCommand.Name echo $Basename |
スクリプトのフルパスを取得
$MyInvocation.MyCommand.path で取得できます。
1 2 |
$ScriptName = $MyInvocation.MyCommand.Path echo $ScriptName |
まとめ
上の4通りの違いをみてみるために、以下のようにまとめて記載したスクリプトを作ってみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
$CurrentDir = Split-Path $MyInvocation.MyCommand.path $ScriptName = $MyInvocation.MyCommand.path $Basename = $MyInvocation.MyCommand.Name echo "" echo "スクリプトの保存フォルダ1" echo -------------------------------------------- echo 'Split-Path $MyInvocation.MyCommand.path' echo --- echo $CurrentDir echo -------------------------------------------- echo "" echo "スクリプトの保存フォルダ2(自動変数)" echo -------------------------------------------- echo '$PSScriptRoot' echo --- echo $PSScriptRoot echo -------------------------------------------- echo "" echo "スクリプトのファイル名" echo -------------------------------------------- echo '$MyInvocation.MyCommand.Name' echo --- echo $Basename echo -------------------------------------------- echo "" echo "スクリプトのフルパス" echo -------------------------------------------- echo '$MyInvocation.MyCommand.path' echo --- echo $ScriptName echo -------------------------------------------- |
実行すると以下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
PS > E:\work\filepath.ps1 スクリプトの保存フォルダ1 -------------------------------------------- Split-Path $MyInvocation.MyCommand.path --- E:\work -------------------------------------------- スクリプトの保存フォルダ2(自動変数) -------------------------------------------- $PSScriptRoot --- E:\work -------------------------------------------- スクリプトのファイル名 -------------------------------------------- $MyInvocation.MyCommand.Name --- filepath.ps1 -------------------------------------------- スクリプトのフルパス -------------------------------------------- $MyInvocation.MyCommand.path --- E:\work\filepath.ps1 -------------------------------------------- |
おまけ
スクリプトファイルのパスを取得することでデータ処理などで処理対象のデータと同じフォルダにスクリプトを置いて実行するなどのことができるようになります。使い方はいろいろあると思いますが使用例をば。
スクリプトが存在するフォルダで、当日のYYYYMMDDフォルダを作成し、同じフォルダ内にあるすべてのテキストファイルを作成したフォルダへ保存する。何かの処理をする前にバックアップをとるイメージ。
1 2 3 4 5 6 7 |
$Current = Split-Path $myInvocation.MyCommand.path $Today = (Get-Date).ToString("yyyyMMdd") New-Item ${Current}\${Today} -Type Directory > $null Copy-Item .\*.txt ${Current}\${Today} |
以上です。
↓↓↓ Powershellのレシピ集のおすすめ