将命令添加到windows右键菜单
类别:信息技术
作者:ATScore
发布日期:2021年12月25日
当你自己写好了一个小工具,或者找到一个不错的小工具,但却只能命令行运行时,若能将其添加到右键中,那肯定非常方向。
搜索了一些资料,发现这其实就叫windows shell编程
原理
注册原理
在windows注册表中,登记了若干种类型的右键执行方式,如图
- Folder 文件夹
- 目录 这个我不太清楚是什么东西
- 文件系统对象,也不太清楚
- 驱动器,就是盘符
- 所有文件
- background,也就是空白处
重点可添加的就是background空白处、allfiles所有文件类型,这两类。
其实你的工具如果是只针对特定类型文件的,还可以进一步通过寻找到对应文件类型的clsid
去寻找对应的注册表键值,这里我没有深入研究了。
注册表结构
如下图
在hkey_classes_root-*-shell-$NAME
有(默认)键值,用于显示
有Icon键值,用于指示图标
在下层command
内还有命令行
注意,这个命令的写法,带有绝对路径,引号引用,参数列表用%1等序号表示
传参
经我研究,右键执行命令时,应该会带入当前的work dir、指向的文件。如果有多个文件,会并发执行。
多参数命令
如果是形如 cp a.txt a.bak.txt的,参数要怎么写呢? 可以通过bat来绕过 创建一个bat脚本,在脚本中只利用%1,生成完整的命令。 在 (这篇文章)[https://blog.csdn.net/qhs1573/article/details/100524255] 中,有一个比较好的例子。
@echo off
set testPath="D:/Demo/xyz/11111111.txt"
call :print %testPath%
:print
rem 获取到文件路径
set file_path=%~dp1
echo %file_path%
rem 获取到文件名称
set file_name=%~n1
echo %file_name%
rem 获取到文件后缀
set suffix=%~x1
echo %suffix%
rem 截取倒数第四个开始 截取四个长度
set specStr=%filename:~-4,4%
echo %specStr%
pause
重点是,%~n1表示文件名,%~x1表示后缀,%1表示完整的第1个参数,%0是第0个参数。
实战
我懒的写windows注册表命令,找了一个工具,WinUtilites。 它有一个注册表工具。 点它,点添加,
添加命令行
很简单吧
添加计算器
也不难
添加自己的小工具
注意类型,选all files
然后把命令写成bat。
再然后利用跳转功能去注册表里修改bat的写法
然后就可以用啦,呵呵。