Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 无法在.bat文件的curl命令中正确转义双引号_Batch File_Curl - Fatal编程技术网

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

Batch file 无法在.bat文件的curl命令中正确转义双引号,batch-file,curl,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 如果我直接将这个curl命令输入cmd控制台,它就可以正常工作。我需要让它在批处理文件中工作,但当我将命令按原样放入批处理文件时,它无法解析命令(未指定URL)。这似乎是因为“内容类型:text/plain”周围

我使用以下curl命令将文件上载到云API

curl -k -w %{http_code} -H "Content-Type:text/plain" --data-binary @\\path\to\file.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""
\""Content-Type:text/plain\""
这将上载文件,curl报告成功,但api无法将文件识别为纯文本

""Content-Type:text/plain""
\""Content-Type:text/plain\""
这不会上载文件,curl错误:未指定URL

\"Content-Type:text/plain\"

因此,我发现了许多失败的方法,但没有一种组合能够同时适用于批处理、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 -k -w %{http_code} -H "Content-Type:text/plain" ....
           ^............................^
           this is a failed variable retrieval operation

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

IMO问题出在别处,您必须将
%%
加倍,我会加倍引用几乎所有的参数
curl-k-w%%{http\u code}-H“内容类型:text/plain”--数据二进制“@\\path\to\file.txt”https://api.somesite.com/endpoint“