繁体   English   中英

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

[英]How to remove leading whitespace from first line of text files using batch file in 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[

不幸的是,我所得到的目前还不能正常工作:

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

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

@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之一)并将其发送到 output,重置第first标志以防止剩余数据反流。

下一步是重现除第一行以外的所有内容。

通过将两个for括在括号中并重定向,所有这些都聚集在一起。

请注意,源目录和目标目录必须不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM