当我使用registry项将条目添加到Windows资源pipe理器上下文菜单中时,如下所示:
[HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell] [HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell\Similar Files] [HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell\Similar Files\command] @="%AppData%\\FindAlike\\AddRightClickFile.bat \"%1\""
我得到一个错误
Windows cannot access the specified device, path or file. You may not have the appropriate permissions to access the item.
如果我将文件AddRightClickFile.bat复制到C:\ Windows \ System32并将registry项更改为
[HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell] [HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell\Similar Files] [HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell\Similar Files\command] @="AddRightClickFile.bat \"%1\""
没有错误发生。 但是,我想将AddRightClickFile.bat存储在%Appdata%\ FindAlike中。
在AddRightClickFile.bat中的代码是
reg add "HKEY_CURRENT_USER\Software\FindAlike" /f /v "TestFilePath" /t REG_SZ /d %1
有什么办法可以让.bat文件从上下文菜单命令运行,而将其存储在%AppData%的子文件夹?
编辑
我使用以下代码在代码中创build了registry项:
RegistryKey rk = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Classes\*\shell\Similar Files\command"); string sValue = @"%AppData%\FindAlike\AddRightClickFile.bat ""%1"""; rk.SetValue("",sValue, RegistryValueKind.ExpandString);
并按如下所示设置AddRightClickFile.bat:
start reg add "HKEY_CURRENT_USER\Software\FindAlike" /f /v "RightClickFileName" /t REG_SZ /d %1 exit 0
这个工作正常,但是在我右键点击的文件的目录中创build一个命令窗口。 使用任务pipe理器查看进程我看到cmd.exe和conhost.exe进程已创build。 如果我删除命令窗口,这两个进程消失。 有没有什么办法可以自动终止这些进程,而不用按名称杀死它们,这可能会带来不希望的后果。
您的主要问题是%AppData%
被保存为变量引用,但是当读取注册表值时,变量不会扩展为其值。
原因是注册表项的(default)
值具有REG_SZ
类型。 如果要存储变量引用并自动扩展其值,则需要将注册表项设置为REG_EXPAND_SZ
类型。
所以,你有两个选择
不要使用该变量,请使用完整路径。
更改注册表项类型。
第一个选项没有任何问题,但是第二个选项不能从regedit
完成。 从命令行你可以使用
reg.exe add "HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell\Similar Files\command" /f /ve /t REG_EXPAND_SZ /d "\"%^AppData%\FindAlike\AddRightClickFile.bat\" \"%1\""
或从一个批处理文件
reg.exe add "HKEY_CURRENT_USER\SOFTWARE\Classes\*\shell\Similar Files\command" ^ /f /ve /t REG_EXPAND_SZ ^ /d "\"%%AppData%%\FindAlike\AddRightClickFile.bat\" \"%%1\""
注意 :两者之间的唯一区别是变量引用的转义
我没有看到任何需要在运行时扩展变量,所以我只需输入命令:
在批处理文件中:
@REG ADD "HKCU\Software\Classes\*\shell\Similar Files\command" /VE /D "\"%APPDATA%\FindAlike\AddRightClickFile.bat\" \"%%~1\"" /F>NUL
从命令提示符:
REG ADD "HKCU\Software\Classes\*\shell\Similar Files\command" /VE /D "\"%APPDATA%\FindAlike\AddRightClickFile.bat\" \"%~1\"" /F>NUL
[编辑]
如果这就是放在AddRightClickFile.bat
中的所有内容,那么您可以完全绕过该文件,并直接输入信息作为运行命令:
从批处理文件:
@REG ADD "HKCU\Software\Classes\*\shell\Similar Files\command" /VE /D "CMD /C \"REG ADD \"HKCU\Software\FindAlike\" /V \"TestFilePath\" /D \"\\\"%%L\\\"\" /F^>NUL\"" /F>NUL