如何在Windows批处理中从wttr.in提取天气数据到变量?
解决wttr.in数据提取的编码与变量赋值问题
乱码问题根源
wttr.in返回UTF-8编码的内容,但Windows CMD默认使用GBK(OEM编码),直接重定向到文件再读取会出现编码不兼容,导致乱码。用for循环直接捕获输出并同步处理编码,是更高效的规避方式。
for命令报错的修复
CMD中%是变量引用的特殊字符,直接写%t会被CMD当成未定义变量解析,传给curl的内容为空,才会出现Could not resolve host: %t错误。需要把%转义为%%,确保curl能收到正确的格式参数。
单字段提取的修复方案
执行以下命令可正确捕获气温并赋值,同时解决编码问题:
chcp 65001 >nul # 切换CMD编码为UTF-8,适配wttr.in的输出 for /f "delims=" %%x in ('curl -s wttr.in/berlin?format=%%t') do set temp=%%x
chcp 65001:切换CMD到UTF-8编码,避免乱码-s:让curl静默输出,去掉冗余进度信息%%t:转义后的格式参数,确保curl识别"delims=":防止输出含空格时被截断
多字段批量提取的优化方案
如果要一次性提取气温(%t)、天气状况(%C)、风力(%w),可以用自定义分隔符(比如|)拆分输出到多个变量:
chcp 65001 >nul for /f "tokens=1-3 delims=|" %%a in ('curl -s wttr.in/berlin?format=%%t^|%%C^|%%w') do ( set temp=%%a set condition=%%b set wind=%%c )
^|:转义分隔符|,避免被CMD解析成管道命令tokens=1-3 delims=|:按|拆分输出,分别赋值给%%a/%%b/%%c
验证变量结果
执行完后可通过以下命令查看赋值结果:
echo 气温:%temp% echo 天气:%condition% echo 风力:%wind%
内容的提问来源于stack exchange,提问作者Bricktop
相关产品推荐
相关产品推荐

