WindowsのコマンドとPowerShellで、Start .
でカレントディレクトリがエクスプローラーで開かれるのはなぜ?と思い、調べた内容の記録。
Windowsコマンド
ドキュメント確認 - start
参照ページ:Microsoftのドキュメント (Windowsのコマンド - start)
※Windows Serverのドキュメントだが、基本は同じと考えて参照
- 概要
指定したプログラムまたはコマンドを実行する別のコマンド プロンプト ウィンドウを起動します。
- 解説(抜粋)
- コマンドとしてファイルの名前を入力することにより、ファイルの関連付けを通じて非実行可能ファイルを実行できます。
start
を実行すると、指定した実行可能ファイルの検索が行われ、見つかった場合には、現在の作業ディレクトリに関係なく、その実行可能ファイルが起動します。 実行可能ファイルを検索して、どの拡張子にも一致するものがないと、start
は名前がディレクトリ名と一致するかどうかを調べます。 一致する場合、そのパスにあるExplorer.exe
がstart
によって開かれます。
つまり
Start .
の動きはこうなる
-
.
は実行可能ファイルか? → 実行可能ファイルでない -
.
はディレクトリ名か? → ディレクトリ名(カレントディレクトリ)である -
Explorer.exe
でディレクトリ.
(カレントディレクトリ)を開く
PowerShell
コマンド確認
start
はPowerShell従来のコマンドではないので、まずはAliasを確認
PS > get-alias start
CommandType Name Version Source
----------- ---- ------- ------
Alias start -> Start-Process
PS >
Start-Process
の構文から、Start .
は Start-Process -FilePath .
ということになる。
Start-Process
[-FilePath] <string>
[[-ArgumentList] <string[]>]
[-Credential <pscredential>]
[-WorkingDirectory <string>]
[-LoadUserProfile]
[-NoNewWindow]
[-PassThru]
[-RedirectStandardError <string>]
[-RedirectStandardInput <string>]
[-RedirectStandardOutput <string>]
[-WindowStyle <ProcessWindowStyle>]
[-Wait]
[-UseNewEnvironment]
[<CommonParameters>]
ドキュメント確認 - Start-Process
参照ページ:Microsoftのドキュメント (PowerShell - Start-Process)
このコマンドレットは
Start-Process
、ローカル コンピューターで 1 つ以上のプロセスを開始します。 既定では、Start-Process
現在のプロセスで定義されているすべての環境変数を継承する新しいプロセスを作成します。プロセスで実行するプログラムを指定するには、実行可能ファイルまたはスクリプト ファイル、またはコンピューター上のプログラムを使用して開くことができるファイルを入力します。 実行可能でないファイルを指定する場合は、
Start-Process
コマンドレットと同様に、ファイルに関連付けられているプログラムをInvoke-Item
開始します。パラメーターを使用して、ユーザー プロファイルの
Start-Process
読み込み、新しいウィンドウでのプロセスの開始、代替資格情報の使用などのオプションを指定できます。
The Start-Process cmdlet starts one or more processes on the local computer. By default, Start-Process creates a new process that inherits all the environment variables that are defined in the current process.
To specify the program that runs in the process, enter an executable file or script file, or a file that can be opened using a program on the computer. If you specify a non-executable file, Start-Process starts the program that's associated with the file, similar to the Invoke-Item cmdlet.
You can use the parameters of Start-Process to specify options, such as loading a user profile, starting the process in a new window, or using alternate credentials.
補記・意訳すると
Start-Process
は、ローカルコンピューターで1つ以上のプロセスを開始します。 既定では、Start-Process
で起動したプロセス(子プロセス)には、Start-Process
を実行したプロセス(親プロセス)で定義されているすべての環境変数が継承されます。
プロセスとして起動するファイル(-FilePath
)には、実行ファイル、スクリプトファイル、コンピュータ上のプログラムで開くことができるファイルを指定することができます。
実行ファイル以外が指定された場合は、コマンドレット Invoke-Item
と同様に、指定ファイルに関連付けられたプログラムを開始します。
Start-Process
のオプションパラメーターを使用することで、読み込むユーザープロファイル、新しいウィンドウでの開始、代替資格情報の使用などを指定できます。
ドキュメント確認 - Invoke-Item
参考に Invoke-Item
についても確認。
参照ページ:Microsoftのドキュメント (PowerShell - Invoke-Item)
- 概要
指定した項目に対して、既定のアクションを実行します。
- 説明
コマンドレットは
Invoke-Item
、指定された項目に対して既定のアクションを実行します。 たとえば、実行可能ファイルを実行したり、ドキュメント ファイル タイプに関連付けられているアプリケーションでドキュメント ファイルを開きます。 既定のアクションは項目の種類によって異なり、データへのアクセスを提供する PowerShell プロバイダーによって決まります。
つまり
Powershellでの start .
の動きはこうなる(一部推測)
-
Start .
はStart-Process -FilePath .
- ファイルパス
.
は実行可能ファイルか? → 実行可能ファイルでない - ファイルパス
.
に関連づけられているアプリケーションは?
→ 【推測】ディレクトリ(フォルダ)にはExplorer.exe
が関連づけられている -
Explorer.exe
で.
(カレントディレクトリ)を開く
また、以下2つはどちらも、コマンド実行するとカレントディレクトリが開く。
-
start .
(Start-Process -FilePath .
) -
ii .
(Invoke-Item -Path .
)