Board logo

标题: [注册表类] reg add 中\作为转义字符为什么“时灵时不灵” [打印本页]

作者: Hello123World    时间: 2011-6-14 14:25     标题: reg add 中\作为转义字符为什么“时灵时不灵”

http://bbs.bathome.net/viewthrea ... muid=30829#pid82539
  1. 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前面的\没有消失?

还有就是,如果说"可以转义后面的内容,为什么"c:\hello world\" 最后一个"会被\转义(你尽然作为转义字符,自然可以把特殊符号转义为普通字符)——难道说\的优先级大于"——如果大于,那出现的情况就是不管你加不加",\都会消失(转义了)。
所以我总觉得在reg命令中 \是转义字符的说法有欠考究——因为前后矛盾,难以自圆其说。
作者: CrLf    时间: 2011-6-14 16:56

^和"是预处理中的转义,而\是正则中的转义,二者是截然不同的,其中的区别在findstr上体现得最明显。
作者: Hello123World    时间: 2011-6-14 19:57

2# zm900612
恩,两者的作用范围不同。
那你能解释一下,我提出的那些问题吗?——我觉得很疑惑。
作者: CrLf    时间: 2011-6-14 20:11

3# Hello123World


我也不知道,所以避而不谈...
作者: applba    时间: 2011-6-14 20:22

显然预处理时是不会处理\的。
\作为转义,是由具体的命令进行转义的。
reg中的\只转义特定的字符把,转义后自身就消失了,没有转义后不消失。
作者: qzwqzw    时间: 2011-6-14 21:42

^和"是预处理中的转义,而\是正则中的转义,二者是截然不同的,其中的区别在findstr上体现得最明显。
zm900612 发表于 2011-6-14 16:56

应该说^和"cmd是中的转义,而\是reg中的转义

而reg add只处理data中\对"的转义
以便将 "\"c:\program files\test\test.txt\" arg1" 识别成单个字符串
整体添加到注册表键值中
其它的\就被忽略了
作者: Hello123World    时间: 2011-6-14 22:21

5楼提到了特定字符,6楼更进一步,\只转义"
暂时这么理解吧,以后发现新问题再来探讨。
作者: Hello123World    时间: 2011-6-14 22:25

不对不对,6楼的说法不对,如果\只转义"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\hello" /v world /t reg_sz /d "c:\hello world\\" /f
得到的结果却是 c:\hello world\,这说明\转义了\。
还是觉得5楼的靠谱,虽然特定字符太笼统了。
作者: applba    时间: 2011-6-14 22:45

很明显的,\可以转义引号、空格以及自身,其他的没有测试过,总之没有引号和尖号转义的多。
作者: qzwqzw    时间: 2011-6-16 20:26

空格的转义没看到
自身的转义也仅出现在8楼示例的那个特殊位置中
怀疑是reg自身处理\有bug导致这个问题




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2