Batch脚本中Curl批量请求URL并实现结果换行保存的问题
解决Batch脚本中Curl结果换行无效的问题
你的脚本里有几个关键问题导致换行没生效,我来一步步帮你修正:
首先,先拆解原脚本的错误点:
- 语法错误:
set setlocal EnableDelayedExpansion多了一个set,正确写法是setlocal EnableDelayedExpansion,这直接导致延迟扩展没启用,换行符变量无法正常解析。 - 循环逻辑错误:
for %%x in (set) do完全无效,这个循环只会把字符串set当成唯一的循环项,重复执行里面的curl命令,根本没起到遍历URL的作用。 - 换行符使用错误:你把
%LF%拼在curl命令后面,这会被当成curl的参数,而不是在输出结果后添加换行;再加上延迟扩展没启用,%LF%会被解析为空,自然没效果。 - 输出重定向位置错误:原脚本的重定向只作用于for循环的输出,但curl的内容是直接打印到控制台,没被正确捕获写入文件。
修正后的完整脚本
@echo off setlocal EnableDelayedExpansion :: 正确定义换行符,注意下面必须保留一个空行! (set LF=^ %= 这里的空行是关键,不能删除 =% ) :: 用循环遍历所有URL,写法更简洁易维护 for %%u in ( "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587492&lon=125.952764" "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587493&lon=125.952765" "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587494&lon=125.952766" "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587495&lon=125.952767" "https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-19.587496&lon=125.952768" ) do ( :: -s 参数关闭curl的进度条,让输出更干净 curl -s "%%~u" >> output.txt :: 写入换行符到文件,echo(!LF!避免空行时出现默认提示 echo(!LF!>> output.txt ) endlocal echo 数据已成功保存到output.txt
额外说明
- 如果需要覆盖文件而不是追加内容,把
>>替换成>即可。 - 不想用LF变量的话,也可以直接在每个curl后执行
echo.>> output.txt,但echo.偶尔会受环境变量影响出问题,用LF的方式更稳定。 - 启用延迟扩展后,要用
!LF!而不是%LF%来引用换行符变量,这样在循环里能正确解析。
内容的提问来源于stack exchange,提问作者d'natsu
相关产品推荐
相关产品推荐

