标题: [特效代码] [已解决]批处理reg add命令参数后跟带空格的路径时之奇怪现象 [打印本页]
作者: Hello123World 时间: 2011-6-8 01:53 标题: [已解决]批处理reg add命令参数后跟带空格的路径时之奇怪现象
win7 企业版- @echo off
- ::reg add "HKEY_LOCAL_MACHINE\SOFTWARE\hello" /v world /t reg_sz /d "c:\hello world\" /f
- ::c:\hello world" /f
- ::echo y | reg add "HKEY_LOCAL_MACHINE\SOFTWARE\hello" /v world /t reg_sz /d "c:\hello world\"
- ::c:\hello world"
- ::echo y | reg add "HKEY_LOCAL_MACHINE\SOFTWARE\hello" /v world /t reg_sz /d c:\hello world\
- ::错误: 无效语法。
- ::键入 "REG ADD /?" 了解用法信息。
- ::echo y | reg add "HKEY_LOCAL_MACHINE\SOFTWARE\hello" /v world /t reg_sz /d "c:\hello world\
- ::c:\hello world\
- pause>nul
复制代码
每条执行代码后面跟的都是修改注册表的结果。
这里有几个现象很奇怪:
1.用引号 加 /f 参数时,world后面的 \ 消失了,/f参数似乎被什么转义了
2.单纯用引号的时候,\ 依旧是消失的,引号反而跟了——难道 \ 转义了" ?
3.一个引号时反而实现了我本意,一个引号转义空格?
作者: Batcher 时间: 2011-6-8 02:07
- reg add "HKEY_LOCAL_MACHINE\SOFTWARE\hello" /v world /t reg_sz /d "c:\hello world\\" /f
复制代码
作者: applba 时间: 2011-6-8 02:35
本帖最后由 applba 于 2011-6-8 02:49 编辑
单个引号可以转义其后的所有内容,直到遇到下一个配对的引号,如果没有遇到,转义作用会持续到逻辑行的结束。
作者: applba 时间: 2011-6-8 02:48
本帖最后由 applba 于 2011-6-8 03:06 编辑
反斜杠在这里作为转义符号,可以转义\ "和分隔符等。\消失的原因在于它转义了其后的参数分隔符空格
比如要添加这个键值:
"d:\Program Files\Tencent\QQPCMgr\5.0.1407.201\QQPCTray.exe" /regrun
由于路径部分带了空格所以必须要用引号, /regrun参数之前又有空格,添加键值的的时候还要继续使用一层引号。
""d:\Program Files\Tencent\QQPCMgr\5.0.1407.201\QQPCTray.exe" /regrun"
这样添加肯定会出错的^,开头的两个引号被错误配对,后面的两个引号又会被错误配对。
你必须使用\来转义内层的引号,正确的用法如下:- reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v " QQPCTray2" /d "\"d:\\Program Files\\Tencent\\QQPCMgr\\5.0.1407.201\\QQPCTray.exe\" /regrun" /f
复制代码
论坛怎么了,tab发上来就都成了??
作者: Batcher 时间: 2011-6-8 10:41
4# applba
DZ论坛会把tab转换成空格
作者: cjiabing 时间: 2011-6-8 11:37
- ::摘自《BatMPlayer 2011 Beta V3.28.5.15》,五修改。
- ::%##%表示你的文件路径,已经包含引号,可以使用带有空格的路径。
- reg add HKCR\AudioCD\shell\open\command /t REG_SZ /ve /f /d "\"%##%\" %%1 %%*
- reg add HKCR\AudioCD\shell\PlayList /t REG_SZ /ve /f /d 添加到BatMPlayer播放列表
复制代码
你是幸运的,以前可没有人回答这个问题!~
作者: Hello123World 时间: 2011-6-8 17:24
按照诸位的说法,\是可以作为转义字符了。
作者: Hello123World 时间: 2011-6-8 18:36
"也是作为转义字符——以前只是知道要为有空格的路径加上双引号,现在知道为什么要加上了。
作者: applba 时间: 2011-6-8 21:10
很多编程语言都把\作为转义符号……
但是cmd.exe本身是不支持这个转义符号的……
只是那些外部命令如reg自己对\进行了解析……
作者: Batcher 时间: 2011-6-8 21:33
7# Hello123World
不是“可以”,而是“本来就是”^_^
作者: Hello123World 时间: 2011-6-11 19:26
原来\作为转义字符是来源正则表达式
作者: Batcher 时间: 2011-6-11 19:29
11# Hello123World
其实并非来源于哪里,关键是解释器/编译器要规定一些特殊字符的特殊用法,以便在解释/编译的时候能够正确区分。
作者: Hello123World 时间: 2011-6-11 19:52
本帖最后由 Hello123World 于 2011-6-11 19:54 编辑
12# Batcher - reg add "HKEY_LOCAL_MACHINE\SOFTWARE\hello" /v world /t reg_sz /d "c:\hello world\\" /f
复制代码
我仔细想想,还有个问题,如果\是转义字符的话,为什么
c:\hello world\\ ,hello前面的\没有消失?
echo ^hello 显示的结果是hello——^消失了。——这说明转义过程中即便是不需要转义的符号,还是会得到转义(致使转义字符消失),那么为什么hello前面的\没有消失?
作者: tiandyoin 时间: 2023-9-27 17:59
本帖最后由 tiandyoin 于 2023-9-28 00:46 编辑
回复 13# Hello123World
1.与双引号相连前面的连续个 \ 都需要转义,使用 \\ 表示 \,使用 \" 表示 ",也可以使用 "" 表示 "。如 \\" 转义为 \\\\\"
2.为避免最后一串连续的 \ 与在外层加的双引号起作用, 最后一串连续的 \ 也要转义为 \\ 。如 s=a\\, 调用 "%s%" 时,s 要转成 a\\\\
3.除此之外的 \ 不需要转义。
但这里有一个问题,我不知道怎么转义末尾的空格,如- reg add "HKEY_CURRENT_USER\1" /v "mouse \\\\\" " /d "mouse \\\\"" without \ Borders\\\\" /t "REG_SZ" /f
复制代码
这里要添加一个注册表值为 【mouse \\" 】,如果使用 \" 转义双引号, 则【"mouse \\\\\" "】一共三个双引号,无法配对。
如果使用 "" 转义双引号, 【"mouse \\\\"" "】,一共四个双引号,配对正确。但是添加到注册表后,末尾的空格还是丢失了,变成了【mouse \\"】
试了很多转义方法均不能保留空格。
作者: lforl 时间: 2023-12-7 12:48
批处理常用符号详解
http://www.bathome.net/viewthrea ... 3%D3%C3%B7%FB%BA%C5
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |