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



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

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

如果我直接将这个curl命令输入cmd控制台,它可以很好地工作。我需要让它在批处理文件中工作,但当我按原样将命令放入批处理文件时,它无法解析命令(没有指定URL(。这似乎是由于"内容类型:text/plain"周围有双引号。将其包含在命令中对于api能够处理我的文件至关重要。

根据这个问题的答案,我尝试了几种不同的方法来避免双引号。这些是各种方法的结果。

^"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。我是否可以尝试其他逃跑方法或其他建议?

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

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

尝试

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

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

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

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

最新更新