我用的是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 /F
和dir /S
,因为您已经有了一个平面目录结构。你需要的是for /D
,或者for /F
和dir
来控制排序。
-
使用
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 ) )
-
使用
for /F
和dir
的方法(由于/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