Explorer.exeを検索モードで起動するコマンドラインオプション

投稿者: Anonymous

PowerShellまたはコマンドプロンプトから、Explorer.exe C:hogeのようにコマンドラインオプションを指定するとC:hogeが表示された状態で起動します。
またGUI上で画面右上の検索窓をクリックして*.txtを入力すると、リボンバーに検索ツールが表示されて現在のフォルダ以下にある*.txtファイルを検索します。

コマンドラインオプションを指定して、特定のキーワード検索した状態で起動することは可能でしょうか?
手入力で検索を行った状態と同様の表示になる(※)ことが望ましいです。

PowerShellのlsや、サードパーティー製のファイラなどを使えばより柔軟な結果が得られることは存じていますが、Windows純正のエクスプローラーに限定した内容をうかがいたいです。
Explorer.exeのコマンドラインオプションのヘルプや公式資料が見つからず、SO.jaの類似質問非公式資料で検索についての言及がないため、「本当にないのだろうか」という興味からの質問でもあります。



検索ツールから『リボンバーの検索条件を保存』することで特定条件の*.search-msファイルを作成できます。
しかしこれを使うと画面左のツリービューに検索対象パスが書き換わらず、画面上部のパスもsearch-msファイルのパスが表示されます。
手入力で検索した時は画面上部のパスが検索場所: hogeのような表記に変わります。
エクスプローラーの設定や*.search-msファイルを書き換えることで、前行の表示を実現できるならば質問の課題は解決します。

下記のPowerShellスクリプトで手入力と同等の結果を求めることはできますが、RPAのGUI操作であり成功率が安定しないため避けたいです。

Add-Type -AssemblyName System.Windows.Forms
$dir = [Environment]::GetFolderPath("Desktop")
explorer $dir
sleep 2  # エクスプローラー起動待ち
[System.Windows.Forms.SendKeys]::SendWait("^f")
sleep 1  # 検索窓へのフォーカス移動待ち
[System.Windows.Forms.SendKeys]::SendWait("fuga.piyo")

解決

この検索機能はWindows Searchでして検索結果へのアクセス方法は各種APIが用意されて、例えばプログラム的に検索結果を取得することもできます。Explorerで検索結果を表示する方法としてsearch-ms:プロトコルハンドラが用意されています。プロトコルハンドラの構文としてはいろいろ指定できますが、無難なところで

search-ms:query=検索文字列&crumb=location:フォルダ

くらいが実用的でしょうか。
コマンドプロンプトからプロトコルハンドラを実行する方法としてはstartコマンドを使用します。
最終的には

C:> start search-ms:"query=fuga.piyo&crumb=location:C:Temp"

のようになるでしょうか。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *