batch-file - 无法正确转义 .bat 文件中 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 能够处理我的文件至关重要。
根据这个问题的答案,我尝试了几种不同的方式来转义双引号。这些是各种方法的结果。
^"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 @\\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
这在命令行和批处理文件中都会发生,但是在这两种情况下,未声明变量的默认行为是不同的。在命令行中,如果我们请求一个变量但它不存在,那么解析器会保留变量名,但在批处理文件中,解析器会用空字符串替换变量请求。
推荐阅读
- flutter - Flutter 如何使用 cookie 在浏览器中打开 url
- mysql - 统计 SQL 中属于另一个元素的元素数量(每个品牌的产品数量)
- javascript - 单击下面的字段而不是按钮时保存文本输入?
- sql - 关于微服务架构中的容器可扩展性
- html - HTML 表格总是绝版视图
- python - Django:如何将字符串和 int 转换为变量
- c# - 如何在 C# 中以编程方式更改 PPT 中的文本字段?
- javascript - 笑话:React 功能组件中的功能单元测试
- php - 秘密圣诞老人 奇数用户 PHP Zend
- git - 现在向 gitignore 添加了一个文件,当我从另一台机器拉取时它会被删除