[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
【^】是bat的转义吧,竖线【|】是bat的管道符
第一个正好2对英文双引号,被当成2个字符串,因此不需要对【|】用【^】进行转义
第二个中的
"s#(\"path\":\")[^^,]+(profiles\\\\extensions^|browser\\\\features)#\1%firefox:\=\\\\%\2#gi"
应该是被bat当成了
s#(\"path\":\")[^^,]+(profiles\\\\extensions^|browser\\\\features)#\1%firefox:\=\\\\\2#gi
如果不用【^】对【|】进行转义的话,【|】会被bat当成管道符

可以试试直接echo一下看看,对比一下第二个带【^】和不带【^】的输出
echo "s#(\"path\":\")[^^,]+(profiles\\\\extensions^|browser\\\\features)#\1%firefox:\=\\\\%\2#gi"
echo "s#(\"path\":\")[^^,]+(profiles\\\\extensions|browser\\\\features)#\1%firefox:\=\\\\%\2#gi"

大概是这样子吧

TOP

回复 3# kidzgy


    呃,可是1楼的bat里的sed 不都是奇数个么?

TOP

回复 7# GNGW


    那是参数 , 会按一定规则去掉引号 (保留引号内的内容), 然后传递到命令中

TOP

回复 12# GNGW


    啊 , 确实是少了%
至于还是有一个双引号没被配对 , 那是因为跟参数解析规则并在了一起 , 参数解析规则中的\"其实就表示"(即转义")
分开来的话就像9楼说的那样 , cmd会先将命令和参数部分分解出来 , 然后再将参数部分按一定规则进行解析 传进命令里
参数解析规则参考
http://www.bathome.net/thread-3451-1-20.html

TOP

回复 14# GNGW


\是参数解析步骤时的转义符(仅限转义\和") , 不是参数解析的情况下 , \只是个普通字符 , 一般是外部命令才会进行这个步骤 , 内部命令大部分不会进行这个步骤
^是常规转义符 , 代码解析步骤时使用 , 这步骤绝对会进行的
为啥这样 , 建议问微软

因为在英文双引号内(某种意义上这也是一个转义符) , ^是个普通字符  , %%(仅限脚本文件中)跟""是为了在双引号内的^符号失去了转义作用情况下 , 对双引号内的%和"转义的 , 像是亡羊补牢的感觉???  
其他的就不知道了

TOP

返回列表