无法在.bat文件中的curl命令中正确转义双引号

时间:2018-11-09 19:49:05

标签: batch-file curl

我有以下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^" 

此操作不会上传文件,卷曲错误:未指定URL!

\"Content-Type:text/plain\"

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

""Content-Type:text/plain""

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

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

此操作不会上传文件,卷曲错误:未指定URL!

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

1 个答案:

答案 0 :(得分:2)

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

在批处理文件中,百分号不是值检索操作的一部分,但需要通过将其加倍来对文字进行转义。

尝试

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

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