エクスプローラー右クリックからコマンドを実行する(Reg + Cmd 応用) - Windowsコマンド実用例
Windowsエクスプローラーの右クリックメニューに独自のコマンドを追加し、バッチファイルを簡単に呼び出せるようにする方法を紹介します。レジストリ編集とバッチの組み合わせで、ファイルやフォルダーを右クリックして即時処理が可能になります。
このページではWindowsのレジストリを書き換える内容を扱っています。レジストリにはWindowsの重要な設定も含まれているため、レジストリに対する操作は慎重に行ってください。レジストリの操作にあまり慣れていないときは事前のバックアップを強く推奨します。また、不用意にいろいろなデータの書き換えを行うとWindowsが正常に起動しなくなる原因となります。なお、このページにある内容を利用して生じた問題の責任は負いかねます。
使用コマンド
基本: 右クリックメニューに項目を追加
以下のコマンドで、右クリックメニューに「バッチで処理」という項目を追加し、選択したファイルのパスをバッチに渡せます。
reg add "HKCU\Software\Classes\*\shell\MyBatch" /ve /d "バッチで処理" /f
reg add "HKCU\Software\Classes\*\shell\MyBatch\command" /ve /d "C:\scripts\process.bat \"%1\"" /f
これにより、すべてのファイルに対して右クリックメニューから process.bat
を直接実行できます。
※ 注意: このコマンドをバッチファイル内で使用する場合、%1
の %
は %%1
のように二重に記述する必要があります(バッチファイル内での仕様です)。
補足: cmd /c
を使用する必要があるのは、バッチファイルではなくコマンド列を直接記述したい場合や、特殊な処理(例: 「&&
」 や 「|
」 を含む)を処理させたい場合です。
フォルダー専用のメニューを作る
対象をフォルダーに限定したい場合は、*
の代わりに Folder
を指定します。
reg add "HKCU\Software\Classes\Folder\shell\MyBatch" /ve /d "フォルダー処理" /f
reg add "HKCU\Software\Classes\Folder\shell\MyBatch\command" /ve /d "C:\scripts\process_folder.bat \"%1\"" /f
バッチファイルで受け取るパラメーター
レジストリに %1
を記述しておくことで、右クリックで選択したファイルやフォルダーのパスが、呼び出されたバッチファイル内で %1
として受け取れるようになります。
@echo off
echo 選択されたパス: %1
REM ここに処理を記述
※ 補足: レジストリに記述する %1
は、選択されたファイル・フォルダーのパスを引数としてバッチファイルに渡すことを意味します。一方、バッチファイル内の %1
はその引数を受け取る変数としての記法です。
※ レジストリにおける「%」の、「%1」以外に使えるパターンについては「コマンドラインに指定できるプレースホルダー」もご覧ください。
応用:サブメニュー化・管理者実行・複雑なコマンド
- サブメニュー化:
shell
の下に複数のコマンド項目を作成することで、右クリックメニューにサブメニューを表示できます。
reg add "HKCU\Software\Classes\*\shell\MyMenu" /ve /d "カスタム処理" /f
reg add "HKCU\Software\Classes\*\shell\MyMenu" /v SubCommands /d "" /f
reg add "HKCU\Software\Classes\*\shell\MyMenu\shell\Log" /ve /d "ログ出力" /f
reg add "HKCU\Software\Classes\*\shell\MyMenu\shell\Log\command" /ve /d "C:\scripts\log.bat \"%1\"" /f
reg add "HKCU\Software\Classes\*\shell\MyMenu\shell\Open" /ve /d "処理開始" /f
reg add "HKCU\Software\Classes\*\shell\MyMenu\shell\Open\command" /ve /d "cmd /c \"echo 開始: %1 && timeout /t 1 && C:\scripts\open.bat \"%1\"\"" /f
- 管理者実行:
HasLUAShield
値を追加すると「管理者として実行」のアイコンが付きます。さらに、レジストリにRunAs
値を設定することで、クリック時に実際に管理者実行の確認ダイアログ(UACプロンプト)が表示されます。
reg add "HKCU\Software\Classes\*\shell\MyBatch" /v HasLUAShield /d "" /f
reg add "HKCU\Software\Classes\*\shell\MyBatch" /v RunAs /d "" /f
注意点
- レジストリの操作はシステムに影響するため、実験する際は実行前にバックアップを取ることを推奨します。
- コマンドは
HKCU
(現在のユーザー) に追加するため管理者権限は不要です。逆にすべてのユーザーに適用したい場合はHKLM
に追加する必要があり、その場合は管理者権限が必要になります。 %1
はスペースを含むパスも渡されるため、引用符で囲むことを忘れないでください。