(Windows 8.1) 从自定义上下文菜单选项中获取所选文件夹的路径

(Windows 8.1) Get path of selected folder from custom context menu option

首先,我对批处理语言几乎一无所知。我正在处理一个写入注册表的批处理文件,以便添加一个上下文菜单选项,该选项从调用上下文菜单选项的文件夹中删除 "desktop.ini"。到目前为止,我得到的是:

@echo off

@reg add "HKEY_CLASSES_ROOT\Folder\shell\resetFolderSettings"         /t REG_SZ /v "" /d "Reset folder settings"   /f
rem @reg add "HKEY_CLASSES_ROOT\Folder\shell\resetFolderSettings\command" /t REG_SZ /v "" /d "del /A s h \"%cd%\desktop.ini\" && pause" /f
@reg add "HKEY_CLASSES_ROOT\Folder\shell\resetFolderSettings\command" /t REG_SZ /v "" /d "cmd.exe /c echo \"%~dp0\desktop.ini\" && pause" /f

pause

这不起作用,因为写入注册表的是调用安装 .bat 的静态文件夹路径。我很难找到解决这个问题的方法,所以我最终决定我别无选择,只能在这里寻求帮助。

使用 %V 表示调用上下文菜单选项的文件夹。

因此,您应该在

中使用的参数
reg add "HKCR\Folder\shell\resetFolderSettings\command" ...

可能是 来自批处理脚本(看到 %V 应该被转义为 %%V):

 ... /t REG_SZ /v "" /d "%comspec% /c echo \"%%V\desktop.ini\"&&pause" /F

直接来自 cmd window - % 符号未在此处转义:

 ... /t REG_SZ /v "" /d "%comspec% /c echo \"%V\desktop.ini\"&&pause" /F

编辑。要使 %comspec% 也可扩展(并使用操作 del /A 命令而不是 echo):

 ... /t REG_EXPAND_SZ /ve /d ^%comspec^%" /c del /A \"%V\desktop.ini\"&pause" /F

直接从 cmd window 使用。将转义 % 视为 ^%(但是只有那些 在命令行的双引号部分 之外)。

使用批处理脚本中的另一个转义方案:将所有 % 转义为 %% 如何在 %%comspec%%%%V 中看到如下:

 ... /t REG_EXPAND_SZ /ve /d "%%comspec%% /c del /A \"%%V\desktop.ini\"&pause" /F

结果:

==> reg query "HKCR\Folder\shell\resetFolderSettings\command" /ve

HKEY_CLASSES_ROOT\Folder\shell\resetFolderSettings\command
    (Default)    REG_EXPAND_SZ    %comspec% /c del /A "%V\desktop.ini"&pause