在批处理命令中转义字符串的问题

时间:2016-11-22 14:37:47

标签: batch-file escaping

我正在尝试获取变量,将其置于两个设置字符串之间,最后在Chrome中打开连接字符串。但是,我所遇到的部分字符串是由于使用了特殊字符而引起的问题。

@echo off
set loc=%1
set link1=https://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text='
set link2='&format=json  
set linkdone=%link1%%loc%%link2%

"chrome.exe" "%linkdone%"

link2'&format=json)在这里提出问题,当我在设置后回音。它是一个空字符串,批处理继续回显invalid drive specification,这是由于我假设错误地读取link2

我已尝试将其转发为^'^&format^=json,但似乎无效。其余的代码(特别是没有escapechars的link1)似乎工作正常。

3 个答案:

答案 0 :(得分:2)

要将参数正确引用到set,您必须引用整个参数,这包括变量名称:

set "link2='&format=json"

另请注意,正常变量扩展是在解析命令时进行简单的文本替换,因此您必须在之后正确转义该变量的每次出现,例如

set "linkdone=%link1%%loc%%link2%"

在你的情况下,我可能会选择更简单的东西,但是:

@chrome "https://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text='%1'&format=json"

当不确定如何逃避并引用此变体时,无需摆弄变量。

答案 1 :(得分:0)

set "link2='^&format=json"

应根据需要设置link2(您不要说......)

使用hello的参数,echo" chrome" line生成

"chrome.exe" "https://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text='hello'&format=json"

对我来说 - 并且不会产生错误报告。

答案 2 :(得分:0)

&命令中转义set对我来说失败了,我承认我不知道为什么

所以我提出了一个解决方法。使用__amp__替换&中的set。之后将其替换为实际&(此处为逃避作品!)

@echo off
set loc=%1
set link1=https://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text='
set link2='__amp__format=json
set linkdone=%link1%%loc%%link2%
echo %linkdone:__amp__=^&%

the_loc作为参数的结果:

https://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text='the_loc'&format=json

(BTW无需转义单引号,批次中没有特殊含义)