【问题标题】:unable to properly escape double quotes in curl command in .bat file无法正确转义 .bat 文件中 curl 命令中的双引号
【发布时间】:2018-11-10 04:13:35
【问题描述】:

我有以下 curl 命令将文件上传到云 API。

curl -k -w %{http_code} -H "Content-Type:text/plain" --data-binary @\\path\to\file.txt https://api.somesite.com/endpoint

如果我直接将它输入到 cmd 控制台,这个 curl 命令可以正常工作。我需要让它在批处理文件中工作,但是当我将命令按原样放入批处理文件时,它无法解析命令(未指定 URL)。这似乎是由于“Content-Type:text/plain”周围的双引号引起的。在命令中包含它对于 api 能够处理我的文件至关重要。

根据this question 的回答,我尝试了几种不同的方法来转义双引号。这些是各种方法的结果。

^"Content-Type:text/plain^" 

这个不上传文件,curl错误:没有指定URL!

\"Content-Type:text/plain\"

这样上传文件,curl报成功,但是api无法将文件识别为纯文本。

""Content-Type:text/plain""

这样上传文件,curl报成功,但是api无法将文件识别为纯文本。

\""Content-Type:text/plain\""

这个不上传文件,curl错误:没有指定URL!

所以我发现了很多失败的方法,但没有一种组合可以同时用于批处理、curl 和 api。我可以尝试其他逃避方法或任何其他建议吗?

【问题讨论】:

  • IMO 问题出在其他地方,您必须将 %% 加倍,而我几乎要双引号 curl -k -w %%{http_code} -H "Content-Type:text/plain" --data-binary "@\\path\to\file.txt" "https://api.somesite.com/endpoint"

标签: batch-file curl


【解决方案1】:

你的问题不是引号,而是百分号。

在批处理文件中,不属于值检索操作但文字的百分号需要通过加倍来转义。

试试

curl -k -w %%{http_code} -H "Content-Type:text/plain" --data-binary @\\path\to\file.txt https://api.somesite.com/endpoint

cmd 解析器将单个 % 视为变量值请求的开始,百分号后的文本视为变量名称。

curl -k -w %{http_code} -H "Content-Type:text/plain" ....
           ^............................^
           this is a failed variable retrieval operation

这在命令行和批处理文件中都会发生,但是在这两种情况下,未声明变量的默认行为是不同的。在命令行中,如果我们请求一个变量但它不存在,那么解析器会保留变量名,但在批处理文件中,解析器会用空字符串替换变量请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-13
    • 2013-07-22
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多