Board logo

标题: [注册表类] 批处理如何在文件或文件夹右键菜单加命令行入口的? [打印本页]

作者: qzwqzw    时间: 2011-6-17 17:04     标题: 批处理如何在文件或文件夹右键菜单加命令行入口的?

以前一直使用以下方法
倒也没有什么大问题
  1. reg add "HKCR\*\shell\命令行(&Z)\command" /ve /d cmd
  2. reg add "HKCR\Folder\shell\命令行(&Z)\command" /ve /d "cmd /k cd %L"
复制代码
前不久用起了everything
发现在everything文件列表中选中文件点右键选择命令行
总是切换当前目录到当前用户的配置文件路径下
而不是选定的文件路径下

初步分析了原因
似乎在everything中运行cmd
没有在exploer中的那种自动切换当前路径的特性
所以只好修改HKCR\*\shell\命令行(&M)\command中的空白值
想了想除了使用独立批处理找不到更好的办法
大家有什么高见?
作者: tmplinshi    时间: 2011-6-17 17:24

本帖最后由 tmplinshi 于 2011-6-17 23:38 编辑

我用的是 http://code.kliu.org/cmdopen/,安装后在空白处右键文件夹右键都有“打开命令提示符”菜单。
作者: qzwqzw    时间: 2011-6-17 17:32

看起来是个第三方工具
这比批处理的方法走的更远了
我暂时不予考虑
作者: slore    时间: 2011-6-17 23:04

AllFileSystemObject 这个下面可能需要独立的批处理。。。

你文件和文件夹分开加的话,cmd  /d "%~dp1"不能用么?

刚下了个everything 1.2.1.371 protable,发现直接写cmd也无所谓。可以打开对应的文件夹下
作者: qzwqzw    时间: 2011-6-18 09:53

本帖最后由 qzwqzw 于 2011-6-18 09:54 编辑

我用的是 V1.2.1.451a 内测版本
存在无法正常切换当前路径的问题

也试了官方下载的1.2.1.371版
确实表现的好一些
只是如果文件路径中含有中文字符
会切换到的文件所在盘的根目录

关于cmd  /d "%~dp1"
请你自行确认两个问题
cmd的/d开关的用途
shell命令行是否支持参数扩展
作者: CrLf    时间: 2011-6-18 13:55

我不明白%L为什么能代表当前路径?还有我在注册表里看到了%V,好像也是当前路径的意思,但是在cmd中就不存在这个参数,注册表究竟有哪些特殊参数,能否请知情人指点一下呢?
作者: Pale_Cheung    时间: 2011-6-18 14:29

  1. HKEY_CURRENT_USER\Software\Classes\Folder\shell\CommandPrompt\command
  2. cmd /k cd %l
复制代码
HKEY_CURRENT_USER 换 HKEY_LOCAL_MACHINE 也可以
当然如果有unc路劲的话用 cmd /k pushd %l 才行
作者: tmplinshi    时间: 2011-6-18 15:41

本帖最后由 tmplinshi 于 2011-6-18 15:50 编辑
我不明白%L为什么能代表当前路径?还有我在注册表里看到了%V,好像也是当前路径的意思,但是在cmd中就不存在这个参数,注册表究竟有哪些特殊参数,能否请知情人指点一下呢?
zm900612 发表于 2011-6-18 13:55

%L 不是 cmd 的参数,应该是 Shell (系统外壳) 的参数。

Google 搜索了下...

http://www.computing.net/answers ... arameter/19496.html

%L 表示长路径
%D 表示短路径
%1 根据系统的不同,可能是长路径,或短路径

但是似乎现在的系统中,这三个参数都一样了。

作者: CrLf    时间: 2011-6-18 16:13

8# tmplinshi

Thanks,那%V呢?
作者: qzwqzw    时间: 2011-6-18 16:36

%V应该不能被explorer转义
已知有特殊意义的有
%D %E %H %I %L %S %0 ~ %9 %*
作者: slore    时间: 2011-6-18 22:20

我用的是 V1.2.1.451a 内测版本
存在无法正常切换当前路径的问题

也试了官方下载的1.2.1.371版
确实表现的好一些
只是如果文件路径中含有中文字符
会切换到的文件所在盘的根目录

关于cmd  /d "%~dp1"
请 ...
qzwqzw 发表于 2011-6-18 09:53


随手一打。。。非要说清楚=。=

看来最新版对中文。。。不管啥菜单都会悲剧。。。唉。。。


cmd /k "set fpa=%1&&for %%i in (%fpa%) do @cd /d "%~dpi""


还有你的Z访问键能用么?在WIN7下,要写默认值,项的名字叫&Z没用。
作者: cjiabing    时间: 2011-6-20 11:11

直接用reg就可以解决了,不必第三方。手机上无法给代码,具体可以看“BatMPlayer”的右键菜单关联。
作者: qzwqzw    时间: 2011-6-20 18:25

欣赏了兄的大作
可惜未从其中找到解题的信息
不知是否进一步提示一下?
作者: cjiabing    时间: 2011-6-20 19:14

13# qzwqzw
算俺愚笨,你到底是要做什么?怎么个入口法?
作者: qzwqzw    时间: 2011-6-20 20:08

其实是为了弥补Everything的右键菜单bug
在其列表文件的文件菜单中加入cmd的快捷启动菜单
点菜单后能打开cmd命令行窗口
并自动将cmd的当前路径切换到所选文件的目录下

原本在explorer中直接在注册表中添加cmd是没有问题的
可惜everything的新版本似乎不太支持这种形式
随意需要在注册表键值增加文件的目录信息以便可以切换当前路径
这个目录信息就是是不包含文件名的文件路径
但是注册表中不支持类似%~dp1的增强扩展
所以才发出以上的问题
作者: CrLf    时间: 2011-6-20 20:30

我做了个实验,有些参数搞懂了,有些却仍不明白
  1. .test=testfile
  2. testfile=cmd /k echo "D:%D" "E:%E" "H:%H" "I:%I" "L:%L" "S:%S" "V:%V"
  3. cd \ 2>tmp.test
  4. tmp.test
复制代码
结果是:
"D:C:\tmp.test" "E:E" "H:0" "I::1576632:6620" "L:C:\tmp.test" "S:1" "V:C:\tmp.test"
说明%D、%L和%V都是代表完整路径,可是%E、%H、%I和%S是什么呢?去百度了一下也没查到
作者: cjiabing    时间: 2011-6-20 22:03

15# qzwqzw
可怜,没用过everything,但你说在cmd中显示当前路径是可以的:
  1. @echo off
  2. reg add  HKEY_CLASSES_ROOT\Directory\shell\StartCmd /t REG_SZ /ve /f /d 启动cmd
  3. reg add  HKEY_CLASSES_ROOT\Directory\shell\StartCmd\command /t REG_SZ /ve /f /d "cmd"
  4. pause
复制代码

可能我不理解你的意思,如果不对请指出!~
作者: cjiabing    时间: 2011-6-20 22:19

本帖最后由 cjiabing 于 2011-6-20 22:25 编辑
  1. cmd /k echo %a %b %c %d %e %f %g %h %i %j %k %L %m %n %o %p %q %r %s %t %u %v %w %x %y %z
复制代码
看看这个好玩的结果:
  1. a b c C:\Program Files\Baidu e f g 0 :3180:1472 j k C:\Program Files\Baidu m n o
  2. p q r 1 t u v w x y z
复制代码

意义分析:
  1. %d   路径  C:\Program Files\Baidu
  2. %h           0
  3. %i            :3180:1472
  4. %l    路径  C:\Program Files\Baidu
  5. %s           1
复制代码

作者: CrLf    时间: 2011-6-20 22:45

看来xp下没有%V
作者: powerbat    时间: 2012-6-11 13:35

我的个性化菜单
  1. @echo off
  2. reg add hkcr\Folder\shell\OpenCmd /ve /d "打开CMD命令行(&W)" /f
  3. reg add hkcr\Folder\shell\OpenCmd\command /ve /t REG_EXPAND_SZ /d "%%ComSpec%% /d /q /t:0A /k prompt $+$P$_#$S&echo \"%%L\"&cd/d%%L&for %%%%a in (\"%%L\") do title %%%%~nxa" /f
  4. reg add hkcr\*\shell\OpenCmd /ve /d "打开CMD命令行(&W)" /f
  5. reg add hkcr\*\shell\OpenCmd\command /ve /t REG_EXPAND_SZ /d "%%ComSpec%% /d /q /t:0A /k prompt $+$P$_#$S&echo \"%%L\"&for %%%%a in (\"%%L\..\") do title %%%%~nxa&cd /d %%%%~fa" /f
  6. pause
复制代码
C:\Documents and Settings\Administrator\桌面
# reg query hkcr\Folder\shell\OpenCmd /s

! REG.EXE VERSION 3.0

HKEY_CLASSES_ROOT\Folder\shell\OpenCmd
    <没有名称>  REG_SZ  打开CMD命令行(&W)

HKEY_CLASSES_ROOT\Folder\shell\OpenCmd\command
    <没有名称>  REG_EXPAND_SZ   %ComSpec% /d /q /t:0A /k prompt $+$P$_#$S&echo "
%L"&cd/d%L&for %%a in ("%L") do title %%~nxa

C:\Documents and Settings\Administrator\桌面
# reg query hkcr\*\shell\OpenCmd /s

! REG.EXE VERSION 3.0

HKEY_CLASSES_ROOT\*\shell\OpenCmd
    <没有名称>  REG_SZ  打开CMD命令行(&W)

HKEY_CLASSES_ROOT\*\shell\OpenCmd\command
    <没有名称>  REG_EXPAND_SZ   %ComSpec% /d /q /t:0A /k prompt $+$P$_#$S&echo "
%L"&for %%a in ("%L\..") do title %%~nxa&cd /d %%~fa

C:\Documents and Settings\Administrator\桌面
#

作者: lxzzr    时间: 2012-6-11 14:10

我的:
win7:
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\Directory\shell\StartCmd]
  3. @="命令提示符(&C)"
  4. [HKEY_CLASSES_ROOT\Directory\shell\StartCmd\command]
  5. @="cmd.exe /s /k pushd \"%V\""
复制代码
winxp:
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\Folder\shell\命令提示符(&C)\command]
  3. @="cmd.exe /K CD %1"
复制代码
http://www.enun.net/?p=901
作者: lforl    时间: 2023-2-17 20:01

本帖最后由 lforl 于 2023-2-17 20:22 编辑
%L 不是 cmd 的参数,应该是 Shell (系统外壳) 的参数。

Google 搜索了下...
tmplinshi 发表于 2011-6-18 15:41



今天,我问GPT:cmd中的V%,L%,1%有什么区别?
得到答复  如下:
  1. V%!,(MISSING)L%!和(MISSING)1%!是(MISSING)Windows Shell中的参数,它们的区别如下:
  2. V%!:(MISSING)指定要执行的文件名。
  3. L%!:(MISSING)指定要执行的文件夹名。
  4. 1%!:(MISSING)指定要执行的文件路径。
复制代码
问GPT:shell里面还有哪些类似于上面的参数

GPT答
  1. 除了V%!,(MISSING)L%!,(MISSING)1%!之(MISSING)外,Windows Shell还有其他参数,包括:
  2. -A:指定要执行的命令。
  3. -B:指定要执行的脚本文件。
  4. -C:指定要执行的命令行参数。
  5. -D:指定要执行的环境变量。
  6. -E:指定要执行的环境变量值。
  7. -F:指定要执行的文件名。
  8. -G:指定要执行的文件夹名。
  9. -H:指定要执行的帮助文件。
  10. -I:指定要执行的输入文件。
  11. -J:指定要执行的输出文件。
  12. -K:指定要执行的键盘输入文件。
  13. -L:指定要执行的日志文件。
  14. -M:指定要执行的模块文件。
  15. -N:指定要执行的网络文件。
  16. -O:指定要执行的输出文件。
  17. -P:指定要执行的参数文件。
  18. -Q:指定要执行的查询文件。
  19. -R:指定要执行的资源文件。
  20. -S:指定要执行的脚本文件。
  21. -T:指定要执行的文本文件。
  22. -U:指定要执行的用户文件。
  23. -V:指定要执行的变量文件。
  24. -W:指定要执行的网络文件。
  25. -X:指定要执行的XML文件。
  26. -Y:指定要执行的YAML文件。
  27. -Z:指定要执行的压缩文件。
复制代码
问GPT:shell中除了1%还有什么是含有数字的参数

GPT答
  1. 除了1%!!(MISSING)之外,Windows Shell还有其他带有数字的参数,包括:
  2. -2:指定要执行的第二个文件名。
  3. -3:指定要执行的第三个文件名。
  4. -4:指定要执行的第四个文件名。
  5. -5:指定要执行的第五个文件名。
  6. -6:指定要执行的第六个文件名。
  7. -7:指定要执行的第七个文件名。
  8. -8:指定要执行的第八个文件名。
  9. -9:指定要执行的第九个文件名。
复制代码

作者: lforl    时间: 2023-2-17 20:16

我不知道GPT回答的是否准确。
我查到技术博主有这样总结:
关于参数,有人测试过不同参数一些结果,这里列一个表格。
注:不区分大小写。
参数        大致含义
%*        所有参数
%0、%1        第一个参数,就是当前文件的路径,虽然应用是16位时,路径是短路径,但是现在基本都是32位或64位的,所以基本都是长路径
%2 - %9        第二到第九个参数,具体是什么样的,抱歉,我也不清楚,emm
%D        当前目录路径
%H        不清楚什么意思,不过结果总是0
%I        每次都是不同的数字:number:number这样的结构
%L        同%1,不过是固定长路径,所以都说这个更好
%S        同%H不清楚,但每次都是1
%V        具体解释不太清楚,好像说是在没有动作的情况下什么什么的,不过基本上也是当前的路径
%W        workspace, 当前文件的父目录的路径,不过有人说这个似乎会出点问题

以上参数比较常用的就是%1,%L,%V这三个。

原文链接:https://blog.csdn.net/meng_suiga/article/details/79485855




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2