MENU

PowerShellで実行場所に依存しないパス

当ページのリンクには広告(PR)が含まれていることがあります。
PowerShellで実行場所に依存しないパス。起動場所が違う、スクリプトの位置、参照先を固定の処理例。

スクリプトと同じ場所にCSVを置いたのに、起動するフォルダーを変えたら「見つかりません」と出る。相対パスの基準がスクリプトの場所ではなく、現在の作業場所になっている可能性があります。

PowerShellの$PSScriptRootは、実行しているスクリプトが置かれたフォルダーを示す自動変数です。そこへJoin-Pathでファイル名をつなげれば、起動する場所が変わっても、同じ入力先を指定できます。

目次

スクリプトと入力例を置く

練習用の新しいフォルダーへread-practice.ps1とpractice.csvを置きます。CSVは次の2行です。顧客などの実データは使わず、架空のIDと名前にします。

id,name
A01,練習データ

read-practice.ps1には次の内容を保存します。対話画面へ1行ずつ貼る例ではなく、.ps1ファイルとして実行するためのコードです。

$inputFile = Join-Path $PSScriptRoot 'practice.csv'
if (-not (Test-Path -LiteralPath $inputFile -PathType Leaf)) {
    throw 'スクリプトと同じ場所にpractice.csvを置いてください'
}
$rows = @(Import-Csv -LiteralPath $inputFile -Encoding UTF8)
if ($rows.Count -ne 1 -or $rows[0].id -ne 'A01') {
    throw '練習用CSVの内容を確認してください'
}
$rows[0].name

期待する表示は「練習データ」です。存在確認を先に行い、ファイルがなければ別の場所にある同名ファイルへ進みません。-LiteralPathを使い、パスに含まれる記号をワイルドカードとして読み替えないようにもしています。

起動する場所を二つ変える

まずスクリプトのある場所から起動し、次に別のフォルダーへ移って、スクリプトのフルパスを指定して起動します。どちらでも同じ入力CSVを読めるかを確認してください。PowerShellでパスに空白がある実行ファイルを呼ぶときは、引用符と呼び出し演算子&を使います。

& 'C:\練習場所\read-practice.ps1'

このパスは説明用です。自分が練習ファイルを置いた場所に替えて使います。スクリプト内でSet-Locationを繰り返して場所を合わせるより、読むファイルの絶対パスを作ることで、他の処理の作業場所へ影響を与えずに済みます。

対話画面とファイルの違い

$PSScriptRootはスクリプトの場所を表すための値です。対話画面へ断片だけを貼ったとき、同じように使えると決めないでください。起動方法を調べる際は、現在地を表すGet-Locationの結果と、スクリプトの所在を区別して見ます。

日本語を含む.ps1をWindows PowerShell 5.1で使う場合は、スクリプトの文字コードにも注意します。この例を両方の環境で試すため、練習用のスクリプトはUTF-8のBOM付きで保存します。CSV側はImport-Csv -Encoding UTF8と読み方を指定しています。

実行ユーザーの権限は残る

パスが同じになっても、その場所を読む権限があるとは限りません。タスクスケジューラから実行する場合は、起動するユーザーとアクセスできる場所も確かめます。共有フォルダーが接続されているか、ネットワークの状態が同じかという条件も別です。

この確認はローカルの練習ファイルを二つの作業場所から読んだ範囲です。入力先を固定できたら、同名ファイルの取り違えがないかと、保存先が別の場所へずれていないかも確認します。読み取りと書き出しの両方を、実際に使う起動方法で見比べてください。

関連する記事

pathlib入門|Windowsでも迷いにくいファイルパスの扱い方

WindowsタスクスケジューラでPythonを定期実行する方法

公式資料

about_Automatic_Variables – PowerShell | Microsoft Learn

Get-Item (Microsoft.PowerShell.Management) – PowerShell | Microsoft Learn

about_Character_Encoding – PowerShell | Microsoft Learn

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次