HOWTO · PowerShell
PowerShell で作業ディレクトリを変更する
この記事では、Windows PowerShell で作業ディレクトリを適切に変更する方法と、従来のコマンドプロンプト構文との違いについて説明します。
このページの内容
PowerShell の Set-Location コマンドレットを使うと、現在の場所を変更できます。cd と chdir というエイリアスも使えますが、スクリプトや例では正式なコマンドレット名のほうが意図を理解しやすくなります。移動先には、現在のドライブ上のディレクトリや、別のドライブ上のパスを指定できます。以下の例では、PowerShell が現在のユーザーのホームディレクトリとして定義する $HOME を使います。
Set-Location で作業ディレクトリを変更する
次の例では、ホームディレクトリを現在の場所に設定します。コード例は PowerShell のコマンド構文のまま表示されます。
このセクションのコードと表示されるラベルや出力は英語のままです。
Set-Location -Path $HOME
Set-Location は、PowerShell セッションの現在の場所を変更します。-Path は移動先を指定するパラメーターです。単純なパスなら省略できますが、明示するとコマンドの目的が分かりやすくなります。このコマンドは新しいシェルを起動せず、ほかの実行中のプログラムの場所も変更しません。提供された PowerShell の実行では、この例は正常に完了し、標準出力はありませんでした。
ドライブとディレクトリを変更する
PowerShell では、1つの Set-Location コマンドで別のドライブ上のディレクトリに移動できます。たとえば、現在の PowerShell 環境で D: ドライブとディレクトリを利用できる場合、Set-Location -Path 'D:\Work' でそのパスを現在の場所に設定できます。ドライブには C: のようなファイルシステムのドライブのほか、PowerShell プロバイダーが公開する別種のドライブもあります。移動先は存在し、アクセス可能である必要があります。
コマンド プロンプトでは、ドライブの切り替え方が異なります。アクティブなドライブが C: のときに cd D:\Work を実行すると、D: の記憶されたディレクトリは変わりますが、D: がアクティブになるわけではありません。コマンド プロンプトでは、まず D: でドライブを切り替え、その後 cd \Work でディレクトリを変更します。この違いはコマンド プロンプトに固有です。PowerShell では、移動先のパスを指定した Set-Location を使えば、ドライブとディレクトリをまとめて変更できます。この記事の実行可能な例は PowerShell 向けなので、コマンド プロンプトの書式は本文中で説明しています。
空白を含むパスを扱う
ディレクトリ名に空白が含まれる場合は、パス全体を引用符で囲み、PowerShell が1つの引数として扱うようにします。パスをそのまま指定するには、シングルクォートとダブルクォートのどちらも使えます。たとえば、Set-Location -Path 'C:\Program Files' または Set-Location -Path "C:\Program Files" とします。パスを文字どおりに扱いたい場合はシングルクォートが便利です。ダブルクォートでは、文字列内の PowerShell 変数も展開されます。空白を含むパスのガイド(日本語版)はありません。例のパスは、自分のシステムに存在するディレクトリに置き換えてください。
-PassThru で新しい場所を取得する
通常、Set-Location は場所を変更しますが、場所オブジェクトは返しません。後続のコマンドでそのオブジェクトが必要な場合は、-PassThru を追加します。たとえば、オブジェクトの Path プロパティを読み取ったり、変数に保存したりできます。オブジェクトをすぐ使う場合は、別途 Get-Location を呼び出さずに済みます。
このセクションのコードと表示されるラベルや出力は英語のままです。
$newLocation = Set-Location -Path $HOME -PassThru
$newLocation.Path
コード例と出力は元のバイト列のまま掲載されており、コマンドや出力中の文字列は英語表記のままです。
/root
2行目では、返された場所オブジェクトからパスを読み取ります。提供された PowerShell の実行では、この例は次のパスを出力しました。$HOME はユーザーやシステムによって異なるため、表示されるパスも異なる場合があります。-PassThru は任意です。現在の場所を個別に確認するには Get-Location を使い、返されたオブジェクトが後続のコマンドで役立つ場合にだけ -PassThru を追加してください。
Set-Location のエイリアスを使う
PowerShell では、cd と chdir が Set-Location のエイリアスとして定義されています。sl も別のエイリアスです。対話的な操作では短い形式が便利な場合があります。スクリプトを読む人には正式なコマンドレット名のほうが分かりやすいことが多いため、sl は動作の異なるコマンドではなく、任意の短縮形として扱ってください。どの形式でも現在の PowerShell の場所を変更でき、空白を含むパスを引用符で囲んだ場合も含め、同じ移動先を指定できます。