カスタムコマンド
カスタムコマンド(Custom Commands) は、右クリックメニューから外部プログラムを実行する機能です。名前、プログラム、引数を設定し、選択したファイルに対して実行します。
システムから取得するシェル拡張は、他のソフトウェアが追加した項目です。カスタムコマンドは自分で作成します。
コマンドを追加
- Ctrl+Shift+P(macOS は ⌘+,)で 設定(Settings) を開きます。
- 右クリックメニュー → メニューの内容 の カスタムコマンド をクリックします。
- + コマンドを追加(+ Add command) をクリックします。または + テンプレートから追加…(+ Add from a template…) の よく使うコマンド(Common commands) から選びます。フォーム全体が入力され、後から変更できます。
- 名前(Name) と プログラム(Program) を入力します。プログラム欄末尾の 選択…(Choose…) は、このコンピューターで見つかったプログラムを一覧にします。完全なパスを直接入力することもできます。
x %1 -o%Dなどの 引数(Arguments) を入力します。- ‹ 戻る(‹ Back) で一覧へ戻ります。変更はすぐに反映され、再起動は不要です。
新しいコマンドは、右クリックメニューの最下部の独立した区分に表示されます。別の位置へ移すには、コンテキストメニューの並びを使います。
一覧の見出し下にある コマンドを絞り込み…(Filter commands…) は、名前で一覧を絞り込みます。絞り込み中は行をドラッグできません。 絞り込み後の 3 行目と元の表の 3 件目は異なり、位置を正しく決められないためです。先に絞り込みを解除します。
各欄は次のように使います。
| 欄 | 作用 |
|---|---|
| 名前 | メニューの表示文字です。名前がないコマンドは再起動後に失われるため、空にできません。 |
| プログラム | 実行するプログラムです。空の場合は設定には残りますが、メニューには出ません。 |
| 引数 | プログラムへ渡す引数のテンプレートです。次の節を参照してください。 |
| 対象(Applies to) | *.zip;*.7z のように ; で区切るワイルドカードです。空なら全ファイルが対象です。 |
| File types | ファイル形式やグループを関連付け、対象を限定します。 |
| 表示する場所(Show on) | ファイル(Files)、フォルダー(Folders)、余白(Empty space) を個別に指定できます。 |
| 複数選択時(Multiple selection) | 1 プロセスにまとめる(One process, all items) または 項目ごとに 1 プロセス(One process per item) です。後述します。 |
| コンソールウィンドウ(Console window) | 非表示(Hidden) または 表示(Shown) です。出力を確認したいコマンドラインツールでは表示を選びます。 |
| 実行前に確認(Confirm before running) | 実行する正確なコマンドを、毎回確認画面に表示します。 |
| 有効(Enabled) | オフにすると 4 種類のメニューから隠しますが、設定には残します。 |
引数 の下の プレビュー(Preview) は、現在の選択を使ってコマンドを展開します。テスト実行(Test run) では、その内容を実行します。設定を閉じて右クリックし直さなくても、引数の誤りを確認できます。
引数のプレースホルダー
引数のテンプレート内の記号は、実際のパスなどに置き換わります。最初の 4 つはエクスプローラーと同じ形式です。
| プレースホルダー | 置き換える内容 |
|---|---|
%1 | 最初の選択項目の完全なパスです。 |
%* | 全選択項目を、それぞれ独立した引数として渡します。 |
%D | %1 の親フォルダーです。 |
%N | 拡張子を除いたファイル名です。 |
%E | ドットを除いた拡張子です。%N.%E で元の名前を組み立てられます。 |
%V | 右クリックした場所のフォルダーです。 |
%T | ドロップコマンドの保存先です。ドロップメニュー以外では使えません。 |
%W | 作業ディレクトリです。プログラムに渡す現在のディレクトリでもあります。 |
%% | 文字としての % です。 |
ファイル形式のコマンド、ダブルクリック、ドロップのイベントは、設定 → 右クリックメニュー → メニューの内容 → File Types で設定します。設定を参照してください。%T には有効なドロップ先が必要です。
認識しない記号はそのまま残すため、%APPDATA% などは変更せず渡します。
引数は空白で区切り、1 つずつ渡します。空白を含む部分は二重引用符で囲み、引用符そのものは 2 個続けて書きます。バックスラッシュはエスケープ文字ではないため、C:\Program Files\7z.exe はそのまま書けます。
複数選択とプロセス数
3 個のファイルを選び、ffmpeg -i %1 -y %D\%N.webp と指定した場合は、次のようになります。
| 複数選択時 | プロセス数 | 結果 |
|---|---|---|
| 1 プロセスにまとめる | 1 | 最初のファイルだけを処理し、他の 2 件は渡しません。 |
| 項目ごとに 1 プロセス | 3 | 3 件をそれぞれ変換します。 |
適切な方法は、プログラムが複数入力に対応するかで決まります。VS Code の code %* は 1 プロセスで 3 件を開けますが、ffmpeg の -i は 1 入力です。どちらも一律に適切ではないため、保存前にこの欄を確認します。
項目ごとに 1 プロセス では、20 件を超えると確認を表示します。200 件を超えると実行せず、1 プロセスにまとめる と %* の使用を案内します。
メニューに表示されない条件
条件を満たさないコマンドは、クリックして失敗する項目として表示せず、完全に非表示 にします。次のいずれかに該当すると、そのメニューには出ません。
- 名前 または プログラム が空、あるいは 有効 がオフです。
- 表示する場所 が対象を含みません。たとえば ファイル だけをチェックし、フォルダーを右クリックした場合です。
- 選択項目の 1 件以上が 対象 のワイルドカードに一致しません。1 件だけでなく 全項目 が一致する必要があります。
- アーカイブ内部や接続したスマートフォンです。実際のディスク上のパスがなく、外部プログラムで開けません。
- 引数に、その場所では取得できない情報を使っています。タグ表示には現在のフォルダーがないため
%Vを使うコマンドは出ません。余白では選択がないため%1も使えません。
実行後の動作
実行すると、起動したプロセス数を右下に表示します。コンソールウィンドウ が 非表示 の場合、他には画面が開かないため、この通知で起動を確認できます。
tessoa は 10 秒間 プロセスを監視します。その間にエラー終了すると、追加の通知で失敗を報告します。10 秒後も動くエディターやブラウザーなどは監視を終了します。数時間後に閉じたときの終了コードは、このコマンドの結果を示さないためです。
実行は毎回、展開後の引数を含めてアクティビティに記録します。期待どおり動かない場合は、実際に渡した情報をここで確認できます。
サブメニューに整理
+ サブメニューを追加(+ Add submenu) で作成し、一覧の コマンド行をドラッグ して入れます。外へドラッグすると最上位に戻ります。同じドラッグで順序も決まります。サブメニューは 1 階層までです。
配下の全コマンドが現在のメニューの条件を満たさない場合は、空のサブメニューを残さず、そのメニュー自体を非表示にします。
コマンドの保存先
すべてのコマンドは設定と同じ場所の commands.ini に保存します。手動で編集することもできます。
[group.g_7z]
label = 7-Zip
[cmd.c1]
parent = g_7z
label = Extract here
exec = C:\Program Files\7-Zip\7z.exe
args = x %1 -o%D
on = file
match = *.zip;*.7z;*.rar
mode = each
console = hide
confirm = 0
enabled = 1不正なブロックがあっても、そのブロックだけが無効になり、他は動作します。各コマンドには少なくとも label が必要です。exec は空でも保持でき、設定で作成直後にプログラムをまだ指定していない状態に相当します。
tessoa は外部コマンドの処理内容を把握できないため、元に戻せません。独立したプログラムとして動き、その削除や上書きは アクティビティの取り消し対象に含まれません。進行状況バーもありません。ファイルを変更するコマンドでは 実行前に確認 をオンにしてください。