「今、自分はどこのフォルダで作業しているの?」
PowerShellを使ってファイル操作やスクリプト実行をしていると、現在の作業ディレクトリ(カレントディレクトリ)がどこかを確認したくなる場面はよくあります。
そんなときに役立つのが、PowerShellの基本コマンドGet-Location
です。
この記事では、Get-Location
の使い方や用途、他のコマンドとの連携方法、スクリプトでの活用術までをわかりやすく解説します。
Get-Locationとは?
Get-Location
は、PowerShellで現在の作業ディレクトリ(カレントディレクトリ)を確認するためのコマンドレットです。
LinuxやmacOSのターミナルにおけるpwd
(print working directory)と同じ役割を果たします。
このコマンドを使うことで:
- 自分がどのフォルダで作業しているかを即座に確認できる
- 相対パスの基準点を把握できる
- スクリプト内で現在位置を取得できる
基本的な使い方
コマンドは非常にシンプルで、次のように入力するだけです:
Get-Location
または、短縮形のエイリアスも用意されています:
pwd
どちらを使っても動作は同じです。
一般的には、対話的な操作では短いエイリアスのpwd
、スクリプト内では完全なGet-Location
を使うことが多いでしょう。
出力結果の見方
実行例:
PS C:\Users\Username\Documents> Get-Location
Path
----
C:\Users\Username\Documents
このように、現在自分がいるディレクトリ(Path)が表示されます。
このパスは、ファイルの読み込み・保存・実行の基準になる重要な情報です。
出力結果をプロパティとして取得
Get-Location
の結果はただのテキストではなく、PathInfo
オブジェクトです。
そのため、以下のようにプロパティにアクセスすることができます:
(Get-Location).Path # パス文字列のみ取得
(Get-Location).Provider # プロバイダー情報の取得
(Get-Location).Drive # ドライブ情報の取得
例えば、現在のパスをファイル名に使用したい場合:
$logFile = "log_" + (Get-Location).Path.Replace(":", "").Replace("\", "_") + ".txt"
# 例: log_C_Users_Username_Documents.txt
Set-Locationとの違いと組み合わせ方
コマンド | 目的 |
---|---|
Get-Location | 現在の場所を確認する |
Set-Location | 作業ディレクトリを移動する |
よく使われるのが、以下のような組み合わせ例:
$startPath = Get-Location
Set-Location "C:\Logs"
# 処理を実行…
Set-Location $startPath # 元の場所に戻る
このように、Get-Location
で現在地を保存しておき、後で戻る処理に使うことができます。
より簡単な方法:Push-LocationとPop-Location
上記の例は、次のように書き換えることもできます:
Push-Location
Set-Location "C:\Logs"
# 処理を実行…
Pop-Location # 自動的に元の場所に戻る
Push-Location
は現在の場所をスタックに保存し、Pop-Location
は最後に保存した場所に戻る操作です。
スクリプトやログ出力での活用例
ログファイルに実行場所を記録
PowerShellスクリプト内でログ出力をする際、「どこで実行されたか」を記録するのに便利です:
$currentTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$currentLocation = (Get-Location).Path
$log = "$currentTime - スクリプトの実行場所: $currentLocation"
$log | Out-File -Append "script_log.txt"
動的なパス生成
現在のディレクトリを基準に相対パスを生成する例:
$outputFolder = Join-Path -Path (Get-Location) -ChildPath "output"
if (-not (Test-Path $outputFolder)) {
New-Item -ItemType Directory -Path $outputFolder
}
$reportFile = Join-Path -Path $outputFolder -ChildPath "report.csv"
特定のドライブ内かチェック
if ((Get-Location).Drive.Name -eq "C") {
Write-Output "Cドライブで作業中です"
} else {
Write-Output "別のドライブで作業中です"
}
特定のパス内か確認
$currentPath = (Get-Location).Path
if ($currentPath -like "C:\Users\*") {
Write-Output "ユーザーフォルダ内で作業中です"
}
特殊な使用例
ファイルシステム以外の場所での確認
PowerShellの強みは、ファイルシステム以外のプロバイダー(レジストリや証明書ストアなど)にも同じように移動できることです。
# レジストリに移動
Set-Location HKLM:\SOFTWARE
Get-Location # => HKLM:\SOFTWARE
# 環境変数に移動
Set-Location Env:
Get-Location # => Env:
スタック操作
複数の場所を記憶するスタック操作との連携:
# 現在の場所をスタックに保存
Push-Location
# 別の場所に移動
Set-Location C:\Windows
# スタックに保存された場所一覧を表示
Get-Location -Stack
# 最後に保存した場所に戻る
Pop-Location
よくあるエラーと注意点
Get-Location
自体でエラーはあまり発生しませんが、以下のような場面では注意が必要です:
- スクリプトの先頭で意図しないディレクトリが表示される → スクリプト実行場所に依存
- 対策:スクリプトの冒頭で明示的に
Set-Location
を使用
- 対策:スクリプトの冒頭で明示的に
- 実行環境(VSCodeやタスクスケジューラ)によって起点フォルダが異なる
- 対策:スクリプトの場所を基準にするには以下を使用
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.PathSet-Location $scriptDir
- 対策:スクリプトの場所を基準にするには以下を使用
- パスに特殊文字やスペースが含まれる場合
- 対策:引用符でくくるか、エスケープ処理を行う
$path = (Get-Location).Path$escapedPath = $path -replace ' ', '` ' # スペースをエスケープ
- 対策:引用符でくくるか、エスケープ処理を行う
応用テクニック
現在のディレクトリをプロンプトに表示
PowerShellプロファイル($PROFILE
)に以下を追加すると、プロンプトに現在のディレクトリを表示できます:
function prompt {
$currentLocation = (Get-Location).Path
$shortPath = $currentLocation -replace [regex]::Escape($HOME), "~"
"PS $shortPath> "
}
履歴機能の実装
よく使うディレクトリを記憶する関数:
# PowerShellプロファイルに追加
$global:locationHistory = @()
function Save-Location {
$path = (Get-Location).Path
if ($global:locationHistory -notcontains $path) {
$global:locationHistory += $path
Write-Host "保存しました: $path" -ForegroundColor Green
}
}
function Show-SavedLocations {
for ($i=0; $i -lt $global:locationHistory.Count; $i++) {
Write-Host "$i : $($global:locationHistory[$i])"
}
}
function Go-SavedLocation {
param ([int]$index)
if ($index -ge 0 -and $index -lt $global:locationHistory.Count) {
Set-Location $global:locationHistory[$index]
} else {
Show-SavedLocations
}
}
# エイリアス設定
Set-Alias savehere Save-Location
Set-Alias showsaved Show-SavedLocations
Set-Alias goto Go-SavedLocation
これにより、savehere
で現在の場所を保存、showsaved
で保存した場所一覧を表示、goto 0
で保存した場所に移動できます。
まとめ:作業効率を上げるならGet-Locationを活用しよう!
PowerShellのGet-Location
は、非常に基本的ながら重要なコマンドです。
とくにファイル操作、ログ記録、スクリプトの移動制御など、あらゆる場面で役に立ちます。
ポイントまとめ
Get-Location
はカレントディレクトリを確認するコマンドpwd
でも同じ意味(エイリアス)- パスだけでなく、ドライブ情報やプロバイダー情報も取得可能
Set-Location
と組み合わせて、戻る・記録する処理が可能Push-Location
とPop-Location
でさらに柔軟なディレクトリ操作が可能- スクリプトの信頼性向上にも貢献
PowerShellを使いこなす第一歩として、ぜひGet-Location
を毎日の作業に取り入れてみてください!
特にスクリプトを作成する際には、現在の作業ディレクトリを意識することで、より堅牢なコードが書けるようになります。
ファイル操作の自動化や複雑なディレクトリ間の移動が必要な処理では、Get-Location
は必須の知識です。
PowerShellの入門者から上級者まで、このコマンドの活用法を理解することで、作業効率と信頼性の両方が向上するでしょう。
コメント