我正在尝试获取变量,将其置于两个设置字符串之间,最后在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
)似乎工作正常。
答案 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无需转义单引号,批次中没有特殊含义)