需要对txt文件执行GPSBabel命令



我用的是windows 10。我目前的项目需要我将几个TXT文件合并成一个文件。问题是TXT文件都有相同的名称,区别它们的是它们的文件夹名称。

例如:

Folder1

  • 13位随机名称的文件夹
    • gpsdata.txt
  • 13位随机名称的文件夹
    • gpsdata.txt-文件夹与13位数字随机名称
    • gpsdata.txt

我尝试使用下面的BATCH命令,但它覆盖了文件,我只以最后一个gpsdata.txt文件中的轨道结束。

FOR /R C:FOLDER1 %%i IN (metadata.txt) DO X:GPSBabelgpsbabel -t 
-i xcsv,style=C:mystyle.style -f %%i -o gpx -F C:FOLDER2gpsdata.gpx

是否有一种方法来"复制和合并"这些txt文件,然后转换成gpx通过。bat使用GPSBabel?

感谢

FOR循环似乎没有产生您想要的结果。尝试单独构造FOR循环,直到%%i如您所期望的那样输出。

FOR /R C:FOLDER1 %%i IN (metadata.txt) DO (ECHO %%~i)

您可能希望FOR循环生成每个metadata.txt文件的路径。这能产生你想要的东西吗?

FOR /F "delims=" %%i IN ('DIR /S /B C:FOLDER1metadata.txt') DO (echo %%i)

这可能使代码看起来像:

FOR /F "delims=" %%i IN ('DIR /S /B "C:FOLDER1metadata.txt"') DO (
X:GPSBabelgpsbabel -t -i xcsv,style=C:mystyle.style -f "%%~i" -o gpx -F C:FOLDER2gpsdata.gpx
)

不要使用for /R,也不要使用for /Fdir /S,因为您已经有了一个平面目录结构。你需要的是for /D,或者for /Fdir来控制排序。

  1. 使用for /D的方法(子目录按照文件系统返回的顺序迭代):

    rem // Prepare an empty file to begin with:
    copy nul "C:FOLDER1metadata.txt" > nul
    rem // Iterate over the immediate sub-directories:
    for /D %%I in ("C:FOLDER1?????????????") do (
    rem // Check whether the current sub-directory contains the text file:
    if exist "%%~Igpsdata.txt" (
    rem // Append the text file to the result file:
    copy /B "C:FOLDER1metadata.txt" + "%%~Igpsdata.txt" "C:FOLDER1metadata.txt" > nul
    )
    )
    
  2. 使用for /Fdir的方法(由于/O:N,子目录按字母顺序排序):

    rem // Change into target directory:
    pushd "C:FOLDER1" && (
    rem // Prepare an empty file to begin with:
    copy nul "metadata.txt" > nul
    rem // Iterate over the immediate sub-directories:
    for /F "delims=" %%I in ('dir /B /A:D-L-H-S /O:N "?????????????"') do (
    rem // Check whether the current sub-directory contains the text file:
    if exist "%%Igpsdata.txt" (
    rem // Append the text file to the result file:
    copy /B "metadata.txt" + "%%Igpsdata.txt" "metadata.txt" > nul
    )
    )
    rem // Return from target directory:
    popd
    )
    

对于那些可能需要使用GPSBabel对不同子文件夹内具有相同名称的几个文本文件进行转换以获得GPX的人,我能够使用以下批处理文件执行此操作:

setlocal enabledelayedexpansion
FOR /F "delims=" %%i IN ('DIR /S /B C:FOLDER1metadata.txt') DO "X:GPSBabelgpsbabel.exe" -t -i xcsv,style=C:mystyle.style -f "%%i" -x discard,hdop=10,vdop=20 -x duplicate,location -x simplify,crosstrack,error=0.001k -o gpx -F "%%i".gpx
set f=
for /F "delims=" %%f IN ('DIR /S /B C:FOLDER1*.gpx') DO set f=!f! -f "%%f"
"X:GPSBabelgpsbabel.exe" -t -i gpx %f% -x discard,hdop=10,vdop=20 -x duplicate,location -x simplify,crosstrack,error=0.001k -x nuketypes,waypoints -o gpx -F C:FOLDER2%DATE:~6,4%_%DATE:~3,2%_%DATE:~0,2%_LOG.gpx

第一部分只是为相同文件夹中的每个TXT文件创建一个GPX文件。第二部分是将所有这些GPX文件合并为一个单独的文件,放在不同的文件夹中设置文件名为"current_date"_log.gpx

相关内容

  • 没有找到相关文章