(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
首先,我对批处理语言几乎一无所知。我正在处理一个写入注册表的批处理文件,以便添加一个上下文菜单选项,该选项从调用上下文菜单选项的文件夹中删除 "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