我正在尝试创建一个快捷方式来添加创建以任意文件命名的注册表项。我们的想法是将此快捷方式放在
shell:Sendto
菜单中,以便文件名作为参数传递给命令。
reg add "HKCU\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\AppCompatFlags\Layers" /v %1 /t REG_SZ /d ~HIGHDPIAWARE /f
当我以上述代码为目标创建快捷方式(.lnk)时,它返回
Error: invalid syntax
。
将相同的代码粘贴到 CMD 或 Powershell 窗口中(并用文件路径名替换
%1
)会成功。将原始代码直接粘贴到批处理文件中,然后将快捷方式指向该 .BAT,也成功了。(这是我目前正在做的解决方法。但理想情况下,我更愿意只拥有快捷方式而不是需要一个额外的 .BAT 文件)。
在对原始快捷方式中的语法进行故障排除时,我尝试了将
%1
和 ~HIGHDPIAWARE
用引号引起来的每种排列,但没有任何变化。我想也许 reg.exe 根本不使用 %1
参数变量,所以我尝试使用以下代码创建快捷方式目标 CMD:
cmd.exe /k reg add "HKCU\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\AppCompatFlags\Layers" /v %1 /t REG_SZ /d ~HIGHDPIAWARE /f
但它仍然返回无效的语法错误。然而,正如我上面提到的,当我停止尝试将所有内容放入快捷方式目标中,而是将完全相同的代码放入批处理文件中时,它起作用了。
快捷方式文件无法以相同方式处理语法是否有原因?
shell:Sendto
文件夹(又名
%AppData%\Microsoft\Windows\SendTo
)中的Windows快捷方式作为参数隐式传递给调用文件;无需指定
%n
参数。以下代码将成功作为快捷方式的目标:
reg add "HKCU\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\AppCompatFlags\Layers" /t REG_SZ /d ~HIGHDPIAWARE /f /v
由于快捷方式假定目标是可执行文件的名称,因此调用文件按照参数通常的方式传递,即在可执行文件之后。因此,调用文件名直接在上述代码中的
/v
参数之后传递,有效地“填充”了缺失的参数。幸运的是,reg.exe 参数与顺序无关。如果无法重写参数以将“%1”项放在最末尾,则这可能是不可能的。