Windows PowerShellのデフォルト検索パスにカレントディレクトリを追加する方法

コマンドプロンプトに比べてパワーシェルは何かと便利ですが、たまにコマンドプロンプトより不便だなぁと感じることがあります。

例えば、カレントディレクトリのバッチファイルを実行しようとしたときに

PS C:\Users\vw8u\Desktop\test> test.bat
test.bat : 用語 'test.bat' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログ
ラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合は
そのパスが正しいことを確認してから、再試行してください。
発生場所 行:1 文字:1
+ test.bat
+ ~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (test.bat:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


Suggestion [3,General]: コマンド test.bat は見つかりませんでしたが、現在の場所に存在します。Windows PowerShell は、既定では、現在の場所からコマンドを読み込みません。このコマンドを信頼する場合は 、".\test.bat" と入力してください。詳細については、"get-help about_Command_Precedence" と入力してヘルプを参照してください。
PS C:\Users\vw8u\Desktop\test>

と表示されて実行できなかったということがよくあります。

実行できない原因

コマンドプロンプトと違い、PowerShellではカレントディレクトリがデフォルトの検索パスに含まれていないのが原因です。

つまり、

> test.bat

ではなく、

> .\test.bat

とディレクトリを指定して実行する必要があるんです。

LinuxやCygwinでは当たり前なんですが、コマンドプロンプトのイメージでPowerShellを操作してしまうからこうなっちゃうんですよね。

Power Shellのデフォルト検索パスにカレントディレクトリを追加する

コマンドプロンプトと同じ感覚で操作したい場合は、Power Shellのデフォルトの検索パスにカレントディレクトリを追加します。

コマンドプロンプトの場合は環境変数ダイアログで設定できましたが、Power Shellの場合は、Power Shell起動時に自動的に実行されるスクリプト内で設定します。bashの.bashrcのようなものですね。

起動時に実行されるスクリプトのパスの確認

まず、スクリプトのパスを確認しましょう。

Power Shellを起動して、

$profile
と入力すると、自動的に実行されるスクリプトのパスが表示されます。

スクリプトにデフォルトの検索パスを追加する

起動時に自動実行されるスクリプトのパスが分かったら、そのファイルをメモ帳などで開きます。

もし、そのスクリプトが存在しない場合は、新規に作成してください。ディレクトリもない場合は、mkdirコマンドやエクスプローラを使ってディレクトリも作ってくださいね。

スクリプトをエディタで開き、

Set-Item Env:Path "$Env:Path;.\"
と入力して保存します。

Powershellウインドウを再起動する

PowerShellウインドウを閉じて、再度PowerShellウインドウを起動します。

これでカレントディレクトリにあるファイルをパス無しで実行することができます。

エラーが発生した場合は

もし、

. : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\vw8u\Documents\WindowsPowerShell\Microsof
t.PowerShell_profile.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.
com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:3
+ . 'C:\Users\vw8u\Documents\WindowsPowerShell\Microsoft.PowerShell_pro ...
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

と表示されてスクリプトが実行できない場合は、こちらの記事を参照してスクリプトの実行を有効にしてください。

eng-notebook.com