将命令添加到windows右键菜单

类别:信息技术 作者:ATScore 发布日期:2021年12月25日

file

当你自己写好了一个小工具,或者找到一个不错的小工具,但却只能命令行运行时,若能将其添加到右键中,那肯定非常方向。

搜索了一些资料,发现这其实就叫windows shell编程

原理

注册原理

在windows注册表中,登记了若干种类型的右键执行方式,如图 file

  1. Folder 文件夹
  2. 目录 这个我不太清楚是什么东西
  3. 文件系统对象,也不太清楚
  4. 驱动器,就是盘符
  5. 所有文件
  6. background,也就是空白处

重点可添加的就是background空白处、allfiles所有文件类型,这两类。

其实你的工具如果是只针对特定类型文件的,还可以进一步通过寻找到对应文件类型的clsid去寻找对应的注册表键值,这里我没有深入研究了。

注册表结构

如下图 file

在hkey_classes_root-*-shell-$NAME 有(默认)键值,用于显示 有Icon键值,用于指示图标 在下层command内还有命令行

file 注意,这个命令的写法,带有绝对路径,引号引用,参数列表用%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。 它有一个注册表工具。 file 点它,点添加,

添加命令行

file 很简单吧

添加计算器

file 也不难

添加自己的小工具

file 注意类型,选all files

然后把命令写成bat。

再然后利用跳转功能去注册表里修改bat的写法 file

file

然后就可以用啦,呵呵。