批量编辑.txt文件内容

时间:2017-04-25 17:06:54

标签: batch-file

我有一大堆文本文件,其基本模式为

Files 1 Header
1. Data
2. Data
3. Data

我希望运行一个读取它的批处理并删除第一行和其余行的三个字符并输出如下所示。

Data
Data
Data

尝试构建一个循环来抓取每一行,然后通过%line:~3%,但它不能正常工作,我不知道如何删除文本文件的第一行开头。< / p>

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

for %%a in (*.txt) do for /f "skip=1usebackq tokens=1*" %%t in ("%%a") do >>%%~na.new echo %%u

将每个匹配*.txt的文件名放入%%a,然后读取文件的每一行,跳过第一行,并在第一个空格上标记(默认分隔符),输出第二个(*通过附加到文件名 samenameastextfile .new(%%~na.new

来标记令牌=替代线路令牌

这应该创建一组带有处理结果的新文件。

答案 1 :(得分:0)

您似乎希望处理CSV文件,删除标题行和仅包含行号的第一个数据列。

此批处理代码可能是您的文件重新格式化任务的正确代码:

@echo off
for /F "delims=" %%I in ('dir * /A-D /B 2^>nul') do (
    for /F "usebackq skip=1 tokens=1*" %%A in ("%%~I") do echo %%B>>"%%~nI.tmp"
    move /Y "%%~nI.tmp" "%%~I"
)

外部循环运行命令 DIR 以获取当前目录中的文件名列表,并从该列表中处理每个文件名,与运行循环时当前目录中的文件无关。 / p>

由于skip=1,内部循环处理当前文件中的每一行,但第一行除外。由于tokens=1*将这些行拆分为两个字符串:

  • 将点分配给循环变量A
  • 的数字
  • 在将数字和点分配给下一个循环变量B之后的空格/制表符之后的所有其他内容。

分配给循环变量B的字符串使用命令 ECHO 输出,并重定向到与当前文件同名但文件扩展名为tmp的临时文件中。

处理完当前文件的所有行后,将临时文件移到当前文件上以替换它,即删除当前文件并将临时文件重命名为当前文件的名称。

注1:当前目录中的文件不应具有文件扩展名tmp,因为在这种情况下批处理代码不起作用。

注2:批处理文件不应位于当前目录中,要修改的文件或 DIR 命令行上使用*以外的其他内容排除批处理文件以进行处理。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • dir /?
  • echo /?
  • for /?
  • move /?

另请阅读Microsoft有关Using Command Redirection Operators

的文章