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 .)