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

时间:2015-03-25 22:34:20

标签: windows batch-file command registry contextmenu

首先,我几乎不知道批处理语言。我正在处理一个批处理文件,该文件写入注册表以添加上下文菜单选项,该选项从调用上下文菜单选项的文件夹中删除“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的静态文件夹路径。我在寻找这个问题的解决方案时遇到了一些麻烦,所以我最终决定我别无选择,只能在这里寻求帮助。

1 个答案:

答案 0 :(得分:2)

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

因此,你应该在

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

可以是来自批处理脚本(请参阅%V应该转义为%%V):

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

直接来自cmd窗口 - %符号未在此处进行转义:

 ... /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窗口使用。请参阅上面的转义% ^%(但只有命令行的双引号中的)。

使用批处理脚本中的另一个转义方案:将所有%转义为%%,如%%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