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

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

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

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

我想知道哪些“特殊变量”可用于这个命令行。

例如,我使用以下命令从目录的上下文菜单 (*) 中打开一个 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\""

答案1

评论来自克里斯·古扎克扩展快捷菜单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

答案2

这个问题引起了我的兴趣,所以我做了一些实验。我有一个文件夹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。D、、LV都是目标文件夹。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

这是 cmd.exe 的参数/语法

/k执行以下字符串指定的命令,因此它执行该命令pushd %V ,并且由于唯一的pushd 接受的参数是一条路径,它遵循%V由资源管理器传递的变量,其中包含右键单击的文件夹的路径。

答案4

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

相关内容