Windows10下使用GPSBabel批量合并同名TXT并转GPX问题
问题根源
你现有的脚本会覆盖文件的核心原因是:每次循环调用GPSBabel时都直接写入同一个目标GPX文件,后执行的转换操作会直接覆盖之前已经生成的文件内容,最终只会保留最后一个TXT文件的转换结果。另外你现有循环里匹配的文件名是metadata.txt,和你实际需要处理的gpsdata.txt不符,这也是异常点之一。
方案1:一次性传入所有输入文件(推荐)
GPSBabel本身支持同时传入多个输入文件,会自动合并所有文件的轨迹数据后输出,只需一次调用即可完成转换+合并,效率更高,适合文件数量不算极多的场景。
BAT脚本如下:
@echo off setlocal enabledelayedexpansion :: 初始化输入文件参数变量 set "input_params=" :: 递归遍历所有gpsdata.txt,拼接输入参数 FOR /R C:\FOLDER1 %%i IN (gpsdata.txt) DO ( set "input_params=!input_params! -f "%%i"" ) :: 一次性调用GPSBabel合并转换 X:\GPSBabel\gpsbabel -t -i xcsv,style=C:\mystyle.style !input_params! -o gpx -F C:\FOLDER2\gpsdata.gpx endlocal
方案2:循环追加合并(兼容大量文件场景)
如果需要处理的TXT文件数量极多,拼接的参数长度超过Windows命令行参数限制,可以用循环逐次合并新文件到现有GPX中:
@echo off setlocal enabledelayedexpansion set "output_path=C:\FOLDER2\gpsdata.gpx" :: 先清理旧的输出文件 if exist "!output_path!" del /f /q "!output_path!" set "is_first=1" FOR /R C:\FOLDER1 %%i IN (gpsdata.txt) DO ( if "!is_first!"=="1" ( :: 第一个文件直接生成初始GPX X:\GPSBabel\gpsbabel -t -i xcsv,style=C:\mystyle.style -f "%%i" -o gpx -F "!output_path!" set "is_first=0" ) else ( :: 后续文件和现有GPX合并后覆盖输出 X:\GPSBabel\gpsbabel -t -i xcsv,style=C:\mystyle.style -f "%%i" -i gpx -f "!output_path!" -o gpx -F "!output_path!" ) ) endlocal
内容的提问来源于stack exchange,提问作者Suporte JM
相关产品推荐
相关产品推荐

