【问题标题】:Issues escaping string in batch command在批处理命令中转义字符串的问题
【发布时间】:2016-11-22 14:37:47
【问题描述】:

我正在尝试获取一个变量,将其放在两个集合字符串之间,最后在 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,但它似乎不起作用。其余代码(尤其是没有转义字符的 link1)似乎工作正常。

【问题讨论】:

  • 如果您遵循以下语法,则无需转义:set "VAR=value"(注意引号);由于最后的命令行也包含了引用的变量值,所以还是不需要转义;特殊字符放在"" 中时会失去其特殊含义;最后,您应该声明 %~1,而不是 %1...
  • 不确定您是否必须在 select * from geo.places where text= 的查询中为浏览器转义某些字符,例如 %20 用于 空格,或 %3D 用于=,比如……

标签: batch-file escaping


【解决方案1】:

要正确引用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"

当不确定如何在此变体中转义和引用时,无需摆弄变量。

【讨论】:

  • 干杯伙伴,最后一个工作完美!我对批处理命令还不太熟悉,所以我不确定在字符串中粘贴变量是否会导致问题。
  • 导致的问题比您尝试的要少得多。它可以工作,但除非你真的需要这些部件来做其他我通常不会打扰的事情。
【解决方案2】:

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

(顺便说一句,单引号不需要转义,批量没有特殊含义)

【讨论】:

    【解决方案3】:
    set "link2='^&format=json"
    

    应该根据需要设置link2(你不会说...)

    使用 hello 的参数,echoing “chrome” 行产生

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

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

    【讨论】:

    • 你不需要^
    • @Joey : 嗯,也许你应该试试...如果我没有插入符号就失败了(赢 10)
    • 同样的错误信息,尝试在link1周围也加引号,没有区别。
    • 我直接从我的测试中粘贴了代码。对我来说,它不会产生错误。也许您使用的是不同的操作系统?你在剪切和粘贴代码吗?您使用的是哪个编辑器(已知 WP 或记事本会在应用程序尝试“格式化”代码时产生奇怪的错误)?
    猜你喜欢
    • 2017-02-26
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2021-01-12
    • 2014-03-04
    • 2017-06-05
    • 2015-09-12
    • 1970-01-01
    相关资源
    最近更新 更多