自定义右键命令
自定义命令(Custom Commands) 是你自己往右键菜单里加的条目:填一个名称、一个要调用的程序和一串参数,此后右键单击文件时菜单底部就多出这一条,单击它就把选中的文件交给那个程序。本页讲怎么加一条、参数怎么写,以及一条命令什么时候会出现在菜单里。
这和 tessoa 从系统那里取来的第三方右键插件是两回事:那些是别的软件装进系统的,这些是你自己写的。
添加一条命令
- 按 Ctrl+Shift+P(macOS:⌘+,)打开 设置。
- 找到 操作 这一组,单击 自定义命令。
- 单击 + 添加命令,或者单击 + 从模板添加… 从 常用命令 里挑一条——模板会把整张表单填好,之后照样能改。
- 填 名称 和 程序。程序 那一行右端的 选择… 会列出这台电脑上找到的程序,也可以直接填完整路径。
- 填 参数,例如
x %1 -o%D。 - 单击 ‹ 返回 回到命令列表。改动立刻生效,不用重启。
新加的命令出现在右键菜单最底下,自成一段。想挪位置去右键菜单顺序那一页。
命令列表的表头下面有一格 筛选命令…,攒了几十条之后用它找比滚快。筛选的时候拖不动行——过滤视图里的第 3 行不是命令表里的第 3 条,拖过去会落错位置;先清空筛选再排。
表单上的每一格:
| 字段 | 作用 |
|---|---|
| 名称 | 菜单里显示的文字。留空这条命令下次启动就没了,所以不允许改空 |
| 程序 | 要调用的可执行文件。没填的话这条命令不出现在菜单里,但设置页里留着 |
| 参数 | 传给这个程序的参数模板,见下一节 |
| 适用于 | 通配符,多个用 ; 隔开,例如 *.zip;*.7z。留空表示不限 |
| 出现在 | 文件、文件夹、空白处 三处各自能开关 |
| 多选时 | 一个进程拿全部 或 每项各起一个进程,见下 |
| 控制台窗口 | 隐藏 或 显示。跑命令行工具想看输出时选 显示 |
| 执行前确认 | 打开后每次单击都先弹一个框,写明即将运行的完整命令 |
| 启用 | 关掉之后这条命令四处菜单都不出现,但设置页里还在 |
参数 下面有一块 预览,按你当前选中的文件实时显示这条命令展开之后的样子;单击 试运行 就照预览里那个样子跑一次。填错了参数在这里就能看出来,不必先关掉设置再去右键试。
参数里的占位符
参数模板里这几个记号会被换成实际的路径。前四个和资源管理器的写法一致。
| 占位符 | 换成什么 |
|---|---|
%1 | 第一个选中项的完整路径 |
%* | 全部选中项,展开成多个参数 |
%D | %1 所在的目录 |
%N | 文件名,不带扩展名 |
%E | 扩展名,不带点。所以 %N.%E 拼回原来的文件名 |
%V | 右键单击发生在哪个目录里 |
%W | 工作目录,同时也是交给这个程序的当前目录 |
%% | 一个字面的 % |
不认识的记号原样留着,所以 %APPDATA% 这类写法可以整个传过去。
参数按空格切开,一格一个。路径里有空格的段用双引号括起来,引号里要写一个字面的双引号就连写两个。反斜杠不是转义符,C:\Program Files\7z.exe 照原样写即可。
多选时那一格决定起几个进程
选中三个文件、命令写的是 ffmpeg -i %1 -y %D\%N.webp:
| 多选时 设成 | 起几个进程 | 结果 |
|---|---|---|
| 一个进程拿全部 | 1 | 只有第一个文件被处理,另外两个不会被提到 |
| 每项各起一个进程 | 3 | 三个文件各转一次 |
哪一档对取决于你调用的程序收不收多个输入:VS Code 收(code %* 一个进程开三个文件),ffmpeg 不收(-i 后面只能跟一个文件)。所以这一格没有安全的默认值,填之前想一下。
每项各起一个进程 下选中项太多时有两道闸:超过 20 项先弹一个框问你确不确定;超过 200 项直接拒绝,并提示改用 一个进程拿全部 配 %*。
一条命令什么时候不出现在菜单里
不满足条件的命令整条不出现,而不是出现了单击之后失败。以下任何一条成立,这条命令就不在这次的菜单里:
- 名称 或 程序 是空的,或者 启用 关着。
- 右键单击的位置不在 出现在 勾选的范围里。例如只勾了 文件,而你右键单击的是一个文件夹。
- 选中的项里有一个不符合 适用于 的通配符。这里要求每一项都命中,不是沾一个就算。
- 右键单击发生在压缩包内部或者连着的手机里——那里的条目在磁盘上没有真实路径,传给外部程序也打不开。
- 参数里用了这个位置没有的量。标签聚合视图里没有「当前目录」这个概念,所以含
%V的命令在那里不出现;对着空白处右键时没有选中项,所以含%1的命令不出现。
运行之后会看到什么
单击一条命令,右下角会出现一条提示说明起了几个进程——控制台窗口 设成 隐藏 时屏幕上不会有别的动静,这条提示是唯一的回执。
接下来 tessoa 跟着这些进程十秒。这十秒里退出并且报错的,会再给一条运行失败的提示;十秒之后还活着的(编辑器、浏览器这类),tessoa 就不再管它——它几小时后被关掉时的退出码不是这条命令的结果。
每次运行都记进活动记录,记的是展开之后的完整参数。命令没起到预期效果时,去那里能看到它实际收到的是什么。
整理成子菜单
命令多了可以收进子菜单:单击 + 添加子菜单 建一个,然后在列表里按住命令那一行拖到子菜单上松手,它就归到那一组里;往外拖回到顶层。顺序也是拖出来的。子菜单只有一层。
一个子菜单下面一条命令都不适用时,这个子菜单整个不出现,不会留一个点不开的空盒子。
命令表存在哪
全部命令存在设置目录下的 commands.ini 里,手工编辑同样有效:
[group.g_7z]
label = 7-Zip
[cmd.c1]
parent = g_7z
label = 解压到当前文件夹
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 不知道你的命令干了什么,所以不给撤销。自定义命令跑起来就是一个独立的程序,它删掉或者改写的东西不进[活动记录](/guide/activity)的撤销,也没有进度条。会改动文件的命令建议打开 执行前确认。