推荐的操作

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 语句。