在为上下文菜单编写shell命令时可以使用哪些特殊变量


46

扩展Windows的外壳上下文菜单(例如,在目录上添加“此处打开命令”提示)时,需要在注册表中创建“命令”键。

该“ command”键的值显然可以是任何有效的命令行。

我想知道在此命令行中可以使用哪些“特殊变量”。

例如,我使用以下命令从目录的上下文菜单(*)中打开cmd窗口:

cmd.exe /e:on /f:on /s /k pushd "%V"

我找不到任何关于%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\""

Answers:


58

通过注释克里斯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


18
我不明白“对于所有不表示全部的动词”是什么意思。
上校恐慌

2
关于的警告%W:并非始终可用,如果在您的command值中使用它,将抛出一条隐秘的错误消息。例如,在驱动器或库文件夹的上下文菜单上调用上下文菜单项不会初始化此变量。避免在文件处理程序的上下文菜单项之外使用它。
samthecodingman

有人尝试过%~吗?我只有一个错误。
cdlvcdlv

2
%V如果需要目录名称,则应使用该名称。当您想在后台单击而不是在单个文件或目录名称上单击时,在上下文菜单上添加命令。%L在那种情况下是行不通的。
EnterTheNameHere Bohemian's

11

这个问题使我很感兴趣,所以我做了一些实验。我有一个文件夹C:\iso。当我执行右键单击时发现了什么:

D = C:\iso
H = 0
I = :115057472:7932
L = C:\iso
S = 1
V = C:\iso
W = C:\

I每次尝试都返回一组不同的数字。H总是0,S总是1 DLV为所有的目标文件夹。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\""

(`字符用于分隔符)


3
你右键点击该文件夹,或该文件夹?
上校恐慌


1

确实很难找到%V的含义或这些变量的列表,通过Google,我发现似乎也存在%L。我认为您传递给提示的信息不必超过%V或%L,因为我认为没有其他有用的信息。其中%V可以是目录名,%L可以是文件的位置。如有疑问,回声可能会有所帮助...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.