使用Batch脚本通过Curl请求多URL并保存结果至TXT的换行问题
解决Batch脚本中curl结果换行无效的问题
我帮你梳理下原脚本里的几个问题,然后给出修正后的可行方案:
原脚本的核心错误点
- 语法错误:
set setlocal EnableDelayedExpansion多了个多余的set,正确写法是setlocal EnableDelayedExpansion,这直接导致延迟扩展功能没生效,换行符变量无法正常解析。 - 变量调用错误:开启延迟扩展后,换行符变量
LF必须用!LF!调用,而不是%LF%,否则只会输出字符串本身,不会解析成换行。 - 无效循环:
for %%x in (set) do这个循环完全没有实际作用,里面硬编码了5条curl命令,循环逻辑纯属多余。 - 重定向逻辑问题:原脚本的重定向位置不对,无法实现每个curl结果之间的换行分隔。
修正后的脚本方案(简洁版)
如果只是想让5个curl结果依次写入output.txt,且每个结果间用换行分隔,直接按顺序执行即可:
@echo off setlocal EnableDelayedExpansion :: 定义换行符(注意:两行空行必须保留,不能有任何字符) (set LF=^ %= 这里是空行,不要删 =% ) :: 定义所有URL(去掉多余的引号,避免curl解析问题) set "url1=https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587492&lon=125.952764" set "url2=https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587493&lon=125.952765" set "url3=https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587494&lon=125.952766" set "url4=https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587495&lon=125.952767" set "url5=https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587496&lon=125.952768" :: 清空目标文件(如果需要追加内容,把>改成>>即可) echo. > output.txt :: 执行curl并写入换行分隔 curl !url1! >> output.txt echo !LF! >> output.txt curl !url2! >> output.txt echo !LF! >> output.txt curl !url3! >> output.txt echo !LF! >> output.txt curl !url4! >> output.txt echo !LF! >> output.txt curl !url5! >> output.txt
进阶版(用循环批量处理URL)
如果后续需要增加更多URL,用数组+循环的方式更易维护:
@echo off setlocal EnableDelayedExpansion :: 定义换行符 (set LF=^ %= 空行保留 =% ) :: 用数组存储URL set "urls[1]=https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587492&lon=125.952764" set "urls[2]=https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587493&lon=125.952765" set "urls[3]=https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587494&lon=125.952766" set "urls[4]=https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587495&lon=125.952767" set "urls[5]=https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587496&lon=125.952768" echo. > output.txt :: 循环遍历所有URL,最后一条不添加多余换行 for /L %%i in (1,1,5) do ( curl !urls[%%i]! >> output.txt if not %%i equ 5 echo !LF! >> output.txt )
关键注意事项
- 延迟扩展:开启
EnableDelayedExpansion后,变量必须用!变量名!调用,才能在循环或复杂语句中正确解析。 - 换行符定义:
(set LF=^后面必须紧跟一个空行,注释%=...=%只是占位,不能在那两行之间加任何字符,否则换行符会定义失败。 - 重定向选择:
>会清空原有文件内容后写入,>>是追加内容到文件末尾,根据你的需求选择即可。
内容的提问来源于stack exchange,提问作者d'natsu
相关产品推荐
相关产品推荐

