You need to enable JavaScript to run this app. 如何在Windows批处理脚本的curl命令中正确转义竖线|字符
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows批处理脚本的curl命令中正确转义竖线|字符

问题原因

你遇到的报错确实是payload中的竖线导致的:赋值阶段的^转义仅能保证变量被正确写入,当你用%payload%展开变量时,cmd会对展开后的内容做二次解析,竖线会被识别为管道符截断curl命令,因此才会出现路径找不到的报错。echo看起来输出正常是因为echo命令会把本行管道符后的所有内容默认为输出内容,不做命令解析,因此没有暴露问题。
你已经开启了延迟扩展,但没有使用延迟扩展的变量引用语法,因此特殊字符转义没有生效。

解决方案

方案1:使用延迟扩展引用变量(推荐,无临时文件)

开启延迟扩展后,使用!变量名!语法引用变量时,cmd不会对变量内部的特殊字符做二次解析,直接透传给调用的命令,修改后代码如下:

@echo off
setlocal EnableDelayedExpansion
SET fruit1=apple
SET fruit2=banana
SET "payload={\"name\":\"value\",\"name\":\"%fruit1%^|%fruit2%\"}"
:: 用延迟扩展语法输出
echo !payload!
:: 调用curl时同样用!引用payload,避免特殊字符被解析
curl -X POST -H "Content-Type: application/json" -d "!payload!" "<serverURL>"
endlocal

方案2:写入临时文件传递payload(适合复杂payload场景)

如果payload包含大量特殊字符,还可以把payload写入临时json文件,curl直接读取文件内容作为请求体,完全规避命令行特殊字符解析问题:

@echo off
setlocal EnableDelayedExpansion
SET fruit1=apple
SET fruit2=banana
SET "payload={\"name\":\"value\",\"name\":\"%fruit1%|%fruit2%\"}"
:: 写入临时文件
echo !payload! > temp_payload.json
:: curl用@前缀读取文件内容作为请求体
curl -X POST -H "Content-Type: application/json" -d "@temp_payload.json" "<serverURL>"
:: 清理临时文件
del /q temp_payload.json
endlocal

内容的提问来源于stack exchange,提问作者glass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 03:03:03