Gio*_*Gio 56 windows windows-registry windows-7 command-line
当扩展 Windows 的 shell 上下文菜单时(例如,为了在目录上添加“在此处打开命令”提示),需要在注册表中创建一个“命令”键。
这个“命令”键的值显然可以是任何有效的命令行。
我想知道在此命令行中可以使用哪些“特殊变量”。
例如,我使用以下命令从目录的上下文菜单 (*) 中打开 cmd 窗口:
cmd.exe /e:on /f:on /s /k pushd "%V"
Run Code Online (Sandbox Code Playgroud)
我找不到任何关于%V
实际含义或此类变量的完整列表的参考。
(*) 为此创建了以下注册表项:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\cmdshell]
@=Open Command Prompt Here"
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\cmdshell\command]
@="cmd.exe /e:on /f:on /s /k pushd \"%V\""
Run Code Online (Sandbox Code Playgroud)
小智 70
通过注释克里斯Guzak在扩展快捷菜单可用MSDN文章列出了各种“命令行变量”:
%* – 替换为所有参数。
%~ – 替换为以第二个参数开头和之后的所有参数。
%0 或 %1 – 第一个文件参数。例如“C:\Users\Eric\Desktop\New Text Document.txt”。通常这应该用引号引起来,应用程序命令行解析应该接受引号来消除名称中带有空格和不同命令行参数的文件的歧义(这是一种安全最佳实践,我相信在 MSDN 中提到过)。
%<n>(其中 <n> 是 2-9)——替换为第 n个参数。
%s – 显示命令。
%h – 热键值。
%i – 存储在共享内存句柄中的 IDList 在此处传递。
%l – 第一个参数的长文件名形式。请注意,Win32/64 应用程序将获得长文件名,而 Win16 应用程序将获得短文件名。指定 %l 是首选,因为它避免了探测应用程序类型的需要。
%d – 第一个参数的桌面绝对解析名称(对于没有文件系统路径的项目)。
%v – 对于没有的动词意味着全部。如果没有传递参数,这是工作目录。
%w – 工作目录。
所以 %L 或 %l 应该是首选。
另见http://www.robvanderwoude.com/ntstart.php
Bil*_*3rd 14
这个问题引起了我的兴趣,所以我做了一些实验。我有一个文件夹C:\iso
。当我做右键单击时我发现了什么:
D = C:\iso
H = 0
I = :115057472:7932
L = C:\iso
S = 1
V = C:\iso
W = C:\
Run Code Online (Sandbox Code Playgroud)
I
每次尝试都返回一组不同的数字。H
总是0,S
总是1 D
,L
和V
为所有的目标文件夹。W
是目标文件夹的父文件夹。有人关心扩展吗?
仅供参考:我使用以下注册表项进行测试:
[HKEY_CLASSES_ROOT\Directory\shell\testcmd]
@="Test Command Window Directory"
[HKEY_CLASSES_ROOT\Directory\shell\testcmd\command]
@="cmd.exe /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\""
Run Code Online (Sandbox Code Playgroud)
(` 字符用于分隔符)