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