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

x33g5p2x  于 2023-01-21  发布在  Windows
关注(0)|答案(1)|浏览(211)

我有大约700. tcx文件(旧的GPS运行数据,如果你感兴趣...)。
第一行是:

<?xml version="1.0" encoding="UTF-8"?>

这是10个空格在开始,这是阻止我导入这些数据到Garmin连接(我得到了一个新的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
不幸的是,我的方法现在不太管用:
首先,它会遍历整个文件,而不仅仅是第一行;其次,在每一行上,它不仅仅删除前导空格,它会删除第一个字符(即"〈")之前的所有内容,然后也会删除遇到的下一个空格之后的所有内容。
我知道我的尝试有点可悲,但我希望能学到东西!

tuwxkamq

tuwxkamq1#

@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括在圆括号中并进行重定向,将所有这些集合在一起。
请注意,源目录和目标目录必须不同。

相关问题