「ファイル名を指定して実行」を極める

Win + R キーで開ける「ファイル名を指定して実行」。

![180601_202350_run.JPG](https://qiita-image-store.s3.amazonaws.com/0/191170/9d702294-c442-dfc4-475b-eb5d528277f4.jpeg)

地味に便利なコイツの使いこなし術（と一部マニアックなネタ）をお届けします。

# なぜ「ファイル名を指定して実行」を使うの？

## どの Windows でも使えるから
Windows に標準で備わっている機能なので、どの Windows でも使えます。共有 PC、仮想マシン、後輩の PC、客先の PC などでもサクっと使えます。

### 軽くて速くてシンプルだから
下手なプログラムランチャーよりも軽くて、速くて、シンプルなので地味に使いやすいです。

# 覚えておくと便利なコマンド
厳密に取り上げると長文になっちゃいますが、私がよく使うコマンドを挙げておきます。

## 標準アプリ
| コマンド | 備考 |
| -------- | ---- |
| calc | 電卓 |
| cmd | コマンドプロンプト |
| control | コントロールパネル |
| excel | Excel |
| explorer | エクスプローラー |
| iexplore | Internet Explorer |
| msinfo32 | システム構成 |
| mspaint | ペイント |
| mstsc | リモートデスクトップ |
| notepad | メモ帳 |
| powerpnt | PowerPoint |
| regedit | レジストリエディタ |
| taskmgr | タスクマネージャ |
| winword | Word |

その他参考:

- [windows ファイル名を指定して実行覚書 - Qiita](https://qiita.com/suvene@github/items/454e4f9fb9e426a5c40f)
- [「ファイル名を指定して実行」で、よく使うやつ - Qiita](https://qiita.com/usop4/items/389ee355625641486d98)

## コマンド
cd や dir や if など、コマンドプロンプトから使うようなコマンドは「ファイル名を指定して実行」から実行できません（もっと言うと where コマンドで実体が見つからないもの）。これらコマンドはコマンドプロンプトに組み込まれているものなので、コマンドプロンプトを経由して実行させてやる必要があります。

以下のようにします。

```
cmd /c コマンド
```

例1: if コマンドのヘルプをクリップボードにコピーする

```
cmd /c if /? | clip
```


例2: if コマンドのヘルプをクリップボードにコピーした後、(貼り付ける用の)メモ帳を開く

```
cmd /c if /? | clip & start "" notepad
```

## 環境変数(特殊フォルダ)
特殊なフォルダを開く時に使います。

```
%userprofile%
```

ユーザープロファイルフォルダを開きます。開発環境系の Dotfiles は大体ここにあるので地味に多用します。たとえば Git の global config をいじりたい場合、`hidemaru %userprofile%\.gitconfig` で開けます(hidemaru部分はお使いのエディタを)。

```
%appdata%
```

アプリケーションデータフォルダを開きます。アプリの設定をいじったりバックアップしたりする時にたまに開きますかね。

## shell:XXXX(特殊フォルダ)
これも特殊フォルダを開く系です。

| コマンド | 備考 |
| -------- | ---- |
| shell:desktop | デスクトップ |
| shell:start menu | スタートメニュー |
| shell:sendto | 送るフォルダ |
| shell:recent | 最近使ったファイル |

ちなみに shell:XXXX の XXXX として使えるのは、レジストリの `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders` にて定義されているフォルダパスです。

※レジストリ開くのがだるい方は [Windows 7 のユーザーフォルダ（User Shell Folders）の初期値](http://pasofaq.jp/windows/mycomputer/7usershellfolders.htm) あたりにもまとまってます。

## XXXX.cpl(コントロールパネル)
コントロールパネル系です。

| コマンド | 備考 |
| -------- | ---- |
| control folders | フォルダオプション |
| inetcpl.cpl | インターネットオプション |
| main.cpl | マウスのプロパティ |
| appwiz.cpl | プログラムの追加と削除 |
| sysdm.cpl | システムのプロパティ(Win + Pause/Break キーの方が速いですが) |
| services.msc | 管理ツールのサービス |

参考: [How to run Control Panel tools by typing a command](https://support.microsoft.com/en-us/help/192806/how-to-run-control-panel-tools-by-typing-a-command)

## explorer shell:::{CLSID}
Windows には CLSID という「Windows 上のアプリや機能に割り当てられた識別子」があります。これを指定することでその機能を呼び出すこともできたりします。

例: `explorer.exe Shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}`

これは「ファイル名を指定して実行」を（CLSIDを指定して）呼び出す例です。

### 「ファイル名を指定して実行」を開くコマンド
リモートデスクトップを使っていると Win + R キーが効かない（というより接続元が反応してしまう）ことがあり、素早く呼び出せません。そんな時は以下のバッチファイルを作りましょう。

run.bat

```bat
start "" explorer Shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}
```

これをどこか起動しやすい場所に置いておけば、ワンタッチで開けます。スタートメニュー → ファイル名を指定して実行、よりも速いです。

### (余談)他にどんな CLSID があるの？
本題から逸れるので簡単に。

下記が参考になると思います。全部で 120 個くらいあるみたいですね。

- [CLSID Key (GUID) Shortcuts List for Windows 10 | Windows 10 Tutorials](https://www.tenforums.com/tutorials/3123-clsid-key-guid-shortcuts-list-windows-10-a.html)
- [特殊フォルダやプログラムのCLSID一覧とShellコマンド一覧 | 初心者備忘録](https://www.ka-net.org/blog/?p=8432)

# 履歴を削除する
「ファイル名を指定して実行」の履歴はレジストリ `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU` に記録されているので、ここを消すことで削除できます。ちなみに PowerShell を使えば一発で削除できるようです。

参考: [世界一簡単な「ファイル名を指定して実行」の履歴のクリア(全消し)手順 - Qiita](https://qiita.com/koginoadm/items/84e55f2278cef527bde3)

# 任意アプリを任意名で開けるようにする
「ファイル名を指定して実行」から好きなキーワードで好きなアプリを開けるようにすることも実は可能です。結論を言うと **ショートカットファイルを、PATH の通ったフォルダに置きます**。

手順:

- (1)ショートカットを放り込む用のフォルダを作る
- (2) 1 のフォルダを PATH に通す 
- (3) 1 のフォルダ内の各ショートカット名を工夫する

すると、ショートカット名を打つだけで開けるようになります。たとえば Firefox.exe のショートカットを fi という名前で置いておくと、fi と打つだけで Firefox を開けます。

ちなみに (2) が面倒くさい場合は、C:\Windows や C:\Windows\System32 など元から PATH の通ったフォルダにショートカットを放り込めばいいです。ただこれらはシステムフォルダなので行儀はよくないですね :sweat:

- 参考:
  - [Windowsの「ファイル名を指定して実行」を256倍快適にする - hibomaのはてなダイアリー](http://d.hatena.ne.jp/hiboma/20070311/1173592731)
  - [Windows で環境変数 PATH をいじる方法のまとめ - Qiita](https://qiita.com/sta/items/6d29da0dc7069ffaae60)
  - [「PATH を通す」の意味をできるだけわかりやすく説明する試み - Qiita](https://qiita.com/sta/items/63e1048025d1830d12fd#_reference-69d3e75e8e14e9c002e2)

# コマンドラインをサクッと実行したい
「このコマンドラインを実行したい」というシチュエーションがあると思います。皆さんはどうしていますか？コマンドプロンプトを開いてから貼り付けていますか？

「ファイル名を指定して実行」を使えば割と簡単に実行できます。

手順:

- コマンドラインをコピーする
- Win + R キーを押す
- Ctrl + V キーを押す
- Enter キーを押す

コピーしたコマンドラインを上記 3 ステップで開けます。覚えておくとサクッと開けて快適です。

ただしコマンドラインのファイルパスや引数にスペースを含む場合は "" で囲みましょう。

```
NG:
c:\program files\AutoHotkey\AutoHotkey.exe C:\Users\UserHoge\Desktop\Data folder\ahk.ahk

OK:
"c:\program files\AutoHotkey\AutoHotkey.exe" "C:\Users\UserHoge\Desktop\Data folder\ahk.ahk"
```

# 履歴に関する細かいネタ

## 履歴が保存されない in Win10
設定 > システム > パーソナル > スタート > よく使われるアプリを表示する を オン にしてください。

※グレーアウトされている場合は、先に設定 > プライバシー > Windows 追跡アプリの起動を許可してスタート画面と検索結果の質を向上します をオンにすれば解除できます。

参考:

- [Run does not save command history in Windows 10](https://winaero.com/blog/fix-run-does-not-save-command-history-in-windows-10/)
- [Windows10の「よく使うアプリ」が表示されない、設定がグレーアウトしてる時のチェックポイント - ぼくんちのTV 別館](https://freesoft.tvbok.com/win10/tips_and_tools/most-used-apps-gray-out.html)

## 履歴の仕様
レジストリエディタを見ればわかりますが、ちょっとヘンテコな仕様をしています。

- 保存場所は `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU`
- 保存可能な **履歴数は 26 個まで**
- 履歴1件はアルファベット1文字のエントリと対応付けて保存
- 履歴の表示順序は `MRUList` エントリにてアルファベットを並べる
  - 例: `malkt...` は履歴m, a, l, k, tの順に表示する、の意

# 「ファイル名を指定して実行」を禁止する
レジストリを使うと、「ファイル名を指定して実行」の表示と実行を禁止することもできます。

やり方としては、

- レジストリエディタ regedit.exe を開く
- `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer` キーを開く
- `NoRun` というエントリを REG_DWORD で新規し、値に 1 を設定

環境によっては Windows を再起動しないと反映されないかもです。

参考: [禁止動作等の設定 - いじくるつくーるのヘルプ](https://www.inasoft.org/webhelp/rnsf7/HLP000207.html)

# 「ファイル名を指定して実行」の英語名
**RUN** です。一般動詞すぎて検索が辛いです。

検索するときは「windows run dialog」のように補足でキーワードを付けるのが良いでしょう。

- 参考
  - [4 Ways to open the Run window so that you can run quick commands | Digital Citizen](https://www.digitalcitizen.life/run-window-windows-7-why-use-it-anymore)
  - [Everything You Must Know About The Run Dialog & Most Useful Commands](https://www.makeuseof.com/tag/everything-you-must-know-about-the-run-dialog-most-useful-commands/)

# おわりに
以上、「ファイル名を指定して実行」に関するネタをお届けしました。参考になれば幸いです。

また「こんなネタもあるよ！」等ありましたらぜひ教えてください！