【Windows】startとexplorerコマンドの挙動についての備忘録

Windowsの start や explorer.exe コマンドで、任意のフォルダやファイルを開こうとしてハマったので、備忘録として残しておきます。

なお、ここで扱う start はコマンドプロンプト(cmd.exe)のものです。PowerShellの start は Start-Process のエイリアスで、別のコマンドです。

検証環境 Windows 11 version 26H2

startコマンドの挙動

アプリケーションに紐づけられたファイルを開くときに start を使いますが、ディレクトリをエクスプローラーで開こうとして次のように指定すると、コマンドプロンプトが開いてしまいます。

start "C:\"

一方、ダブルクォーテーションをつけない場合はうまくいきました。

start C:\

この挙動の違いが気になったので、start のリファレンスを見てみると、最初の引用符付き文字列はウィンドウのタイトルとして扱われるとのことでした。

つまり、start "C:\" では、パスではなくタイトルを指定していたわけです。

start "C:\" によって開いたコマンドプロンプト。ウィンドウのタイトルが C:\ になっている

確かにそうなっています。

start で引用符付きのパスを渡すなら、先に空のタイトルを指定すればよいようです。

start "" "C:\"

とはいえ、特定のパスでエクスプローラーを開きたいだけなら、最初から explorer.exe に引数としてパスを渡せばよかったですね……。

ただ、explorer.exe もまた変わった挙動をするようで……。

Explorerの変わった挙動

explorer.exe は、見慣れたファイル閲覧のウィンドウだけでなく、デスクトップやタスクバーにも関わっています。今回試した環境では、終了後の一度目の起動でデスクトップが戻り、二度目以降の起動でファイル閲覧のウィンドウが開きました。

試しに explorer.exe を終了して、もう一度起動してみます。

注意 次のコマンドからrem (コメントアウト指示) を省いて実行すると explorer.exe は強制終了されます。デスクトップやタスクバーも一時的に消えるので、実行する際は気をつけてください。

rem taskkill /f /im explorer.exe

実行すると、デスクトップ画面が消えて単色になり、タスクバーにも何も表示されなくなりました。

一度目の実行

explorer.exe

これで元の状態に戻りました。

二度目の実行

explorer.exe

見慣れたエクスプローラーのウィンドウが開きました。

一方、一度目の実行時に引数としてパスを与えると、最初からエクスプローラーのウィンドウが開きました。

explorer.exe "C:\"

引数に様々な値を入れてみる

explorer.exe の引数に様々な値を入れてみます。

1. 空文字

explorer.exe ""

二度目以降の実行では、引数がない場合と同じ挙動でした。

一度目では、デスクトップは立ち上がらず、エクスプローラーのホーム画面が開きました。

2. バックスラッシュ付き

explorer.exe "C:\"

正しくCドライブが開きました。

3. スラッシュ付き

explorer.exe "C:/"

なぜかDocumentsが開きました。

4. 無効な値

explorer.exe "あ"

こちらもDocumentsが開きました。無効な値を引数とすると、Documentsが開く挙動に見えます。スラッシュの場合も無効と解釈されているようです。

どうしてもスラッシュが使いたい場合

先頭に file:// もしくは file:/// をつけると開けます。RFC 8089の構文に沿って書くなら、file:///C:/Windows の形が正しいですが、とりあえずどちらでも動きます。

explorer.exe "file:///C:/Windows"

この書き方では、バックスラッシュでも開けました。

explorer.exe "file:///C:\Windows"

どころか、スラッシュとバックスラッシュが混在していても開けました。

explorer.exe "file:///C:\Windows/System32"

余談

特定のファイル・フォルダを選択した状態でエクスプローラーを開きたい場合は、/select オプションが便利です。

explorer.exe /select,"file://C:/Windows/System32"

まとめ

start の引用符の扱いにハマり、explorer.exe の引数もいろいろ試すことになりました。バッチファイルを書くときにまた迷いそうなので、備忘録として残しておきます。