【问题标题】:Need to run GPSBabel command on txt files需要对 txt 文件运行 GPSBabel 命令
【发布时间】:2021-11-11 18:12:34
【问题描述】:

我使用的是 Windows 10。我当前的项目需要我将多个 TXT 文件合并为一个文件。问题是 TXT 文件的名称都相同,而它们的区别在于它们的文件夹名称。

例如:

文件夹 1

  • 具有 13 位随机名称的文件夹
    • gpsdata.txt
  • 具有 13 位随机名称的文件夹
    • gpsdata.txt - 具有 13 位随机名称的文件夹
    • gpsdata.txt

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

FOR /R C:\FOLDER1 %%i IN (metadata.txt) DO X:\GPSBabel\gpsbabel -t 
-i xcsv,style=C:\mystyle.style -f %%i -o gpx -F C:\FOLDER2\gpsdata.gpx

有没有办法“复制和合并”这些 txt 文件,然后使用 GPSBabel 通过 .BAT 转换为 gpx?

谢谢

【问题讨论】:

    标签: windows batch-file cmd gpx gpsbabel


    【解决方案1】:

    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:\FOLDER1\metadata.txt') DO (echo %%i)
    

    这可能会使代码看起来像:

    FOR /F "delims=" %%i IN ('DIR /S /B "C:\FOLDER1\metadata.txt"') DO (
        X:\GPSBabel\gpsbabel -t -i xcsv,style=C:\mystyle.style -f "%%~i" -o gpx -F C:\FOLDER2\gpsdata.gpx
    )
    

    【讨论】:

    • 哦不知道如何回显参数...如果您将其放在括号内它似乎可以工作?...我会尝试...谢谢
    • 感谢您的评论...它几乎可以满足我的需求,除了每次运行代码时,它都会重写 gpsdata.gpx 文件.....但我会尝试使用您的建议,看看我可以如何调整它来工作......
    • @SuporteJM,我不知道gpsbabel 可执行文件。是否将文件连接到C:\FOLDER2\gpsdata.gpx
    • 嗨@lit,不,它实际上将 txt 文件转换为 GPX 文件....但是在您对“回显”参数的支持下,我能够实现我的目标...
    • @SuporteJM,我很高兴听到你已经达到了你的目标。请使用复选标记图标选择三 (3) 个答案之一作为“最佳”答案。除非您认为这是“最佳”答案,否则我不会要求您选择我的。这就是 SO 如何让其他人知道什么是有效的。
    【解决方案2】:

    不要使用for /R,也不要使用for /Fdir /S,因为你有一个扁平的目录结构。您需要for /Dfor /F 以及dir 以控制排序。

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

       rem // Prepare an empty file to begin with:
       copy nul "C:\FOLDER1\metadata.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 "%%~I\gpsdata.txt" (
               rem // Append the text file to the result file:
               copy /B "C:\FOLDER1\metadata.txt" + "%%~I\gpsdata.txt" "C:\FOLDER1\metadata.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 "%%I\gpsdata.txt" (
                   rem // Append the text file to the result file:
                   copy /B "metadata.txt" + "%%I\gpsdata.txt" "metadata.txt" > nul
               )
           )
           rem // Return from target directory:
           popd
       )
      

    【讨论】:

      【解决方案3】:

      对于那些可能需要使用 GPSBabel 对不同子文件夹中具有相同名称的多个 txt 文件进行转换以从中获取 GPX 的用户,我可以使用以下批处理文件执行此操作:

      setlocal enabledelayedexpansion
      FOR /F "delims=" %%i IN ('DIR /S /B C:\FOLDER1\metadata.txt') DO "X:\GPSBabel\gpsbabel.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:\GPSBabel\gpsbabel.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

      【讨论】:

        猜你喜欢
        • 2022-01-25
        • 2012-11-14
        • 1970-01-01
        • 2012-05-03
        • 1970-01-01
        • 1970-01-01
        • 2022-07-12
        • 1970-01-01
        • 2016-04-19
        相关资源
        最近更新 更多