推荐的操作
reg add HKEY_CLASSES_ROOT\*\shell\QRCP\command /ve /d """"%QRCP_BIN%qrcp.exe""" -q -k -w 0 """%%1"""" /f>nul 2>nul
这种加进注册表的结果值为:"%QRCP_BIN%qrcp.exe" -q -k -w 0 "%1",其中%QRCP_BIN%会转换为变量值(如带空格的路径,带空格的路径名),其中%1为第一个参数。
特征:外4内3。
批处理中中\为转义符
1)cmd操作注册表的时候,尽量以管理员模式运行,有些键需要管理员权限才能操作;
2)写入注册表带路径,特别是\的问题,有好几种写法心得记录一下。
写法1:全不带引号,拟在注册表中写入 a.cmd "%v" 这样的字符,那么在复制阶段可以这样赋值:
@set str1=a.cmd
@set str2=%v
@reg add key_postion /ve /d "%str1% ""%%v.""" f>nul 2>nul
第三句代码结果就是注册表中最后的复制就是 %str1% "%v",第二个双-双引号会变化成1和双引号,两个%%会变成一个%%号,最后三个双引号会变成1个双引号,因为最后一个和首位第一个合并为双引号引用了,注册表不显示这组双引号。
写法2:先写引号,连接字符
@set str2="explorer %str1%\\"
@reg add HKEY_CURRENT_USER\Software\Classes\CLSID\{52205fd8-5dfb-447d-801a-d0b52f2e83e1}\Shell\OpenNewWindow\command /ve /d %str2% /f >NUL 2>NUL
str2中str1正常引用变量值,后面两个反斜杠在echo阶段也是两个,写到注册表后,这个值在注册表中会变成:explorer %str1%\,因为两个斜杠在注册表里面会消除掉一个斜杠。
两个反斜杠需要在最后的位置才会被合并,如果在中间,则不会被合并,而且如果组合后反斜杠三个会出现无法写入注册表错误,四个也可以。假如上面代码是这样的:
@set str2="explorer c:\\ d:\\"
@reg add HKEY_CURRENT_USER\Software\Classes\CLSID\{52205fd8-5dfb-447d-801a-d0b52f2e83e1}\Shell\OpenNewWindow\command /ve /d %str2% /f >NUL 2>NUL
这样的结果就会是:explorer c:\\ d:\这样的结果。
写法3:条件判断
@set tp1=%str1:~-1%
@if %tp1%==\ (
@set str1=%str1:~0,-1%
)
%str1:~-1%是表示str1最后一个字符,上面的代码意思是如果最后一个字符等于\,那么从开始截取到最后一位(不包括最后一位)。
if语句,if not 语句。