如何在Windows CMD中向curl命令传递含空格的字符串变量
解决Windows CMD中向curl传递含空格字符串变量的问题
问题根源
你当前的命令失败是因为在CMD中设置变量时,将双引号包含在了变量值中(比如set projectName="Online Banking REST API OmPf"),导致变量展开后生成的JSON出现嵌套双引号("projectName": ""Online Banking REST API OmPf""),这是无效的JSON格式,从而触发400错误。
正确解决方案
步骤1:正确设置CMD变量
在CMD中,使用带引号的set语法定义含空格的变量,这样变量值不会包含外层的双引号:
set "emailID=xxxx@gmail.com" set "openAPISpec=http://petstore/v2/swagger.json" set "licenseKey=ccc0e4-b000-491f-9d7b-7e59f9768" set "projectName=Online Banking REST API OmPf" set "MyDefault=dXNlcjFAbmV0YmFua2luZy5pbzphZG1pbjEyMyDefault" set "MyRoleAdmin=dXNlcjFAbmV0YmFua2luZy5pbzphZG1pbjEyMyRoleAdmin" set "MyRoleUser=dXNlcjFAbmV0YmFua2luZy5pbzphZG1pbjEyMyRoleUser"
这种写法既可以处理含空格的变量值,又不会将双引号存入变量中。
步骤2:构造正确的curl命令
确保JSON payload格式合法,对JSON中的双引号使用反斜杠转义,直接引用清理后的变量即可:
curl -s --location --request POST "https://dev.ethicalcheck.qtech.ai/api/v1/scan" ^ -H "Content-Type: application/json" ^ -d "{\"openAPISpec\": \"%openAPISpec%\", \"email\": \"%emailID%\", \"licenseKey\": \"%licenseKey%\", \"projectName\": \"%projectName%\", \"headers\": [\"Authorization: Bearer %MyDefault%\", \"Authorization: Bearer %MyRoleAdmin%\", \"Authorization: Bearer %MyRoleUser%\"]}"
- 使用
^作为CMD中的换行符,让命令更易读 - 所有JSON中的双引号都用
\"转义,确保CMD正确解析 - 变量直接嵌入JSON的字符串值中,生成的JSON格式完全合法
验证逻辑
执行上述命令后,生成的JSON payload中projectName字段会是:
"projectName": "Online Banking REST API OmPf"
这是符合规范的JSON格式,不会触发后端的400错误。
内容的提问来源于stack exchange,提问作者devops-admin
相关产品推荐
相关产品推荐

