如何在Windows中使用批处理文件从文本文件的第一行删除前导空白?



我有大约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[与*

不幸的是,我现在得到的不是很有效:

首先,它遍历整个文件,而不仅仅是第一行。其次,在每行中,它不仅删除前导空格,还删除直到并包括第一个字符(这是一个"<&quot;)的所有内容,然后还删除下一个空格之后的所有内容。

我知道我的尝试有点可悲,但我希望学习!

@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放在括号中并重定向,将它们聚集在一起。

注意,源目录和目标目录不能相同。

最新更新