[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 右键打开CMD/命令提示符/命令窗口 以及 ShellCMD_v1.0

本帖最后由 zd870905 于 2013-9-13 21:40 编辑

网上关于右键添加CMD的资料已经泛滥成灾,但是很多都存在片面性(不完美)和误导性(混淆NT5和NT6系统),本人才疏学浅,没什么心思去写那些牛叉的批处理,只是特别喜欢研究一些微不足道的小事,在系统使用过程中什么方式简洁、美观,我就琢磨什么,所以这个东西是长期混迹网上的结果,虽然有人做出了类似的工具,但是过于简陋。

整个工具需要掌握的只是相应的注册表路径,所以不存在任何的技术性,所以我就不献丑了——把bat打包exe只是不好意思见人。本工具的定位是基础服务,不涉及到什么批处理技术。不得不承认经过这么多年,XP时代过去后,基本上没多少人用CMD了,但是只要有人需要,只要我自己需要,我就会有写出来的冲动(很多时候都有心无力)。就像这个工具,本来只需要两个功能,安装和卸载,但是没办法,越写越多,越写越细,直到没什么可写了。就这样的一个小东西,其中也经历了很多困难,我自己学习后慢慢解决了,很少专门去问别人,搜索基本可以解决99%的问题。

右键菜单,大家都知道是由HKCR中的一些注册表项定义的,就我自己掌握的信息是有 7 个HKCR项可以定义右键菜单,每一项所对应的右键菜单的位置都不尽相同,存在一个错综复杂的关系。学过高级语言编程的都知道“类”的定义,什么父类子类,往往交叉引用,并不是树状关系。这导致一个什么问题,同时对7个HKCR项的shell中添加一个相同名称的右键菜单,某些类往往会被覆盖掉最后只显示优先级最高的那一项。当然, 如果将每一个shell项的名称设成完全不一样,右键菜单中就会同时看到多个“打开CMD”了。当然,这些东西也没什么用,纯粹是我吃饱了撑的。

A~G代表这七个注册表项,只要对其进行简单的读写就行了。下面详细解释一下,其中类的说法纯属猜测,但是优先级顺序完全是实测。
A:背景,也就是空白处(background)。它有一个特殊的子类——桌面背景 F。但是F的优先级高于A。所以,通常情况下是想要添加空白处的右键菜单只需要针对A。XP中虽然有这个注册表项,但是XP似乎不支持shell,只支持shellex,所以在XP下,想要在空白处添加右键只能通过调用类——clsid,可惜目前看来只能添加一项,虽然我不太相信。
B:所有的文件类型,也就 HKCR\* ,它也是 G 的子类,同样优先级高于G。
C:文件夹(folder)。除了普通的文件夹,其实还包括一些特殊的位置,例如“计算机(我的电脑)”、回收站等等。D、E都是它的子类,所以一般用folder就行了。
D:目录。目前只能总结出来一点,这个家伙只针对基本文件夹,也就是我们常见的那些文件夹,比较单纯,没C那么复杂。但是它似乎不是谁的子类,而且优先级最低。
E:驱动器。就是C盘光盘U盘什么的。
F:桌面空白处。A的子类,优先级高于A,在XP中不存在。
G:文件和文件夹,其实这么说不完整,我是怕别人一眼看不懂其含义,注册表项是AllFilesystemObjects(所有文件系统对象)。也就是说B和D合起来基本上就是它了。B的优先级比它高,但是D的优先级却比它低,这个我就不是很懂,毕竟业余人士。
综上所述,想要在系统的所有位置全部加上右键打开CMD的菜单,大致有三种方案:ABC;AEG;ABDE。

关于打开CMD所使用的命令语句,核心命令(还可以在后面接上辅助命令)分为以下几种:
cmd.exe
cmd.exe /s /k cd [?]
cmd.exe /s /k pushd [?]
解释:
/s 不是很懂,似乎没多大用,增强型参数,加上就是了。
/k 运行后面的命令然后保持窗口。另外一个与之相对应的参数 /c 是不保持窗口,用于其他的一些情况,很容易想到,不过有个小黑窗一闪而过确实有点不完美,一般用VBS代替。
cd和pushd在xp和win7中都支持,毫无疑问地推荐用pushd,因为cd相比还是存在一些不足之处。
[?] 为什么打个“?”,因为这个参数确实有很多人都弄混了。大家可能见过的值都有:%L,%1,%V。其中%L和%V分别在xp和win7才有效,所以很多人照搬XP的做法是失败的。
在XP    下最常见的是:cmd.exe /k cd "%L"。
在win7下最常见的是:cmd.exe /s /k pushd "%V"(这是官方写法,win7自带的“在此处打开命令窗口”就是这么写的)。
win7的写法只需要把%V改成%L也可用于XP,或者%1,这个是通用的。这个代表路径的参数是由资源管理器提供的,不是CMD定义的外部参数,所以在cmd中%V是无效的参数。
要不要加双引号对"":这个其实无论在XP或者win7下都是没必要加的。因为xp和win7的系统默认都开启了扩展(enable extensions),此时cd和pushd参数针对带空格的路径会自动补全双引号对。但是加上更加保险一点,防止人为地关闭了扩展。
所以在XP和win7都通用的方法是:cmd.exe /s /k pushd "%1"
如果需要在打开时还能看到cmd版本信息,就重复调用一次:cmd.exe /s /k pushd "%1"&cmd.exe
但是,但是这些命令对于 A - 文件 来说是存在一定问题,因为此时%1是含有文件名称的,cd和pushd都会产生错误信息-目录名称无效。为了屏蔽掉这大煞风景的错误信息,我们不得不再加上一个命令,所以终极的命令就是:
cmd.exe /s /k pushd "%1"&cls&cmd.exe
这个命令适应了A~G的所有情况,显示出来的结果完全一致,没有不协调的地方。
可是我认为对于 A 来说,这么些效率太低了,于是在工具中我为 A 使用的 command 其实是我一直没有说到的主命令 cmd.exe,仅仅只有这7个字符就行了。
win7中,ctrl+shift才能看见“在此处打开命令窗口”,这只是一个非必要的注册表子键,自己能找出来

通过上面的内容大家很容易想到在右键菜单中调用 cmd.exe /c 还可以还完成很多功能,许多个性化的右键例如“复制路径”也可以这样完成,显然不是很难,只是有个小黑窗而已。
那么到此为止吧,右键打开CMD基本就是这些内容了。end
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

返回列表