在Windows命令提示符中转义双引号

时间:2017-03-07 03:23:24

标签: windows perl escaping

我有一个包含以下内容的文件

$(CP) "$(O_SSL)" "$(INSTALLTOP)\bin"
$(CP) "$(O_CRYPTO)" "$(INSTALLTOP)\bin"

我想添加以下几行(顺序无关紧要)

$(CP) "$(SSL).pdb" "$(INSTALLTOP)\bin"
$(CP) "$(CRYPTO).pdb" "$(INSTALLTOP)\bin"

因此,使用perl,我创建了以下命令(必须从命令提示符运行):

perl -pi.bak -e 's#\t\$\(CP\) "\$\(O_([^)]+)\)" "\$\(INSTALLTOP\)\\bin"#$&\n\t\$(CP) "\$($1).pdb" "\$(INSTALLTOP)\\bin#g' ntdll.mak

但我收到以下错误

Can't find string terminator "'" anywhere before EOF at -e line 1.
The system cannot find the path specified.

我尝试用双引号替换单引号(并将所有内部双引号加倍),所以

perl -pi.bak -e "s#\t\$\(CP\) ""\$\(O_([^)]+)\)"" ""\$\(INSTALLTOP\)\\bin""#$&\n\t\$(CP) ""\$($1).pdb"" ""\$(INSTALLTOP)\\bin""#g" ntdll.mak

但我只是得到以下错误

Substitution pattern not terminated at -e line 1.

我该怎么做? (...我不想创建一个单独的脚本文件,但是如果没有其他(合理的)方法我就会这样做)

1 个答案:

答案 0 :(得分:0)

我通过对文字双引号使用八进制转义来解决这个问题

perl -pi.bak -e "s#\t\$\(CP\) \042\$\(O_([^)]+)\)\042 \042\$\(INSTALLTOP\)\\bin\042#$&\n\t\$(CP) \042\$(LIB_D)\\\$($1).pdb\042 \042\$(INSTALLTOP)\\bin\042#g" ntdll.mak