我有大约700个。tcx文件(旧的GPS运行数据,如果你感兴趣…)。
第一行是:
<?xml version="1.0" encoding="UTF-8"?>
开始有10个空格,这使我无法将这些数据导入Garmin Connect(我得到了一个新的Garmin手表)。
所以,我需要从第一行700个文件的前面删除这个空格。我正试图用批处理文件自动化这个过程(尽管考虑到我花了多长时间来尝试这样做,手工做会更快…)
到目前为止,我得到了:
@echo off
setlocal enabledelayedexpansion
for /F "tokens=1" %%A in (C:[path][filename].tcx) do (
set line=%%A
echo !line:~1! >> C:[path][filename].tcx
)
endlocal
其中[path]是文件当前存储的路径,filename是我正在测试的文件。一旦我得到它的工作,我将替换[filename[与*
不幸的是,我现在得到的不是很有效:
首先,它遍历整个文件,而不仅仅是第一行。其次,在每行中,它不仅删除前导空格,还删除直到并包括第一个字符(这是一个"<")的所有内容,然后还删除下一个空格之后的所有内容。
我知道我的尝试有点可悲,但我希望学习!
@ECHO OFF
SETLOCAL
rem The following settings for the directories are names
rem that I use for testing and deliberately includes spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.
SET "sourcedir=u:your files"
SET "destdir=u:your results"
FOR %%e IN ("%sourcedir%*.tcx") DO (
SET "first=y"
(
FOR /f "usebackqtokens=*" %%y IN ("%%e") DO IF DEFINED first SET "first="&ECHO %%y
FOR /f "usebackqskip=1delims=" %%y IN ("%%e") DO ECHO %%y
)>"%destdir%%%~nxe"
)
GOTO :EOF
在应用于实际数据之前,始终针对测试目录进行验证。
请注意,如果文件名不包含分隔符,如空格,则usebackq
和%filename1%
周围的引号都可以省略。
这应该可以完成任务。它只是从每个文件中读取第一行,删除前导空格(默认的delims
之一)并将其发送到输出,重置first
标志以防止剩余数据的反流。
下一步是复制除第一行以外的所有内容。
通过将两个for
放在括号中并重定向,将它们聚集在一起。
注意,源目录和目标目录不能相同。