批处理文件中CURL含空格特殊字符的字符串获取失败问题
解决批处理中CURL输出存入变量丢失内容的问题
这个问题我太熟了!本质是FOR /F命令的默认行为在搞鬼——它默认会把空格、制表符、换行符当作内容分隔符,所以只提取了输出字符串里第一个空格前的部分,也就是你看到的e-e。
最优解决方案
修改FOR /F的参数,强制它读取整行内容(包含所有空格),命令如下:
FOR /F "delims=" %%I IN ('curl.exe -s -S %URL%') DO (SET "W=%%I")
关键细节解释
"delims=":这个参数告诉FOR /F不要使用任何分隔符,这样整行输出都会被当作一个完整的单元赋值给变量%%I。SET "W=%%I":用引号包裹赋值语句,可以避免如果输出内容末尾有空格被意外截断,同时能更好地处理包含特殊字符的内容。
额外说明
如果你的CURL输出有多行内容,上面的命令会把最后一行的内容存入变量W(因为每次循环都会覆盖之前的赋值)。如果需要保留所有行,可以改成追加模式:
SETLOCAL EnableDelayedExpansion SET "W=" FOR /F "delims=" %%I IN ('curl.exe -s -S %URL%') DO (SET "W=!W!%%I") ENDLOCAL & SET "W=%W%"
这里需要开启延迟变量扩展,才能在循环中正确拼接变量内容。
内容的提问来源于stack exchange,提问作者John Donvan
相关产品推荐
相关产品推荐

