批处理文件:删除一堆txt文件中的行

Batch File: delete lines in a bunch of txt files

我在删除 txt 文件的前三行时循环保存 txt 文件时遇到问题。 到目前为止我的代码如下:

@echo off

setlocal enableextensions enabledelayedexpansion
set /a count=1
for %%a in ("C:\Users\%Username%\Desktop\conduct\*.txt") do (
echo %%a
Copy NUL C:\Users\%Username%\Desktop\conducterei\conduct!count!.txt
    for /f "skip=3 tokens=*" %%g in (%%a) do (
    >>"C:\Users\%Username%\Desktop\conducterei\conduct!count!.txt" echo %%g
    )
set /a "count+=1"
)

pause

我读到 For /f 循环不接受通配符,所以我做了一个嵌套循环,但现在我在复制保存在 %%g 变量中的文本时遇到了问题。 DOS提示我的目标文件夹不存在,但我只是在第一个for循环中用COPY NUL创建了它

第二个 for 循环中的命令似乎不正确,不能将 %%g 保存到文本文件中。 原始文本文件如下所示:

blabla
blank
blank
4 5 6 7 8 9 2143
1 2 6 7 1 0 9763
. . . . . . .

我只想要新文本文件中的数字!我已经在这个线程 (Batch File To Copy Every Line In .txt File And Then Create New .txt File For Each Line) 中读到有关该问题的信息,但仅对于一个 txt 文件,我需要做很多工作 ;)

我希望我的问题很清楚:)

格瑞茨巴夫

"DOS prompts that my destination folder does not exist, but i just created it with COPY NUL in the first for loop."

不,您试图创建一个文件,而不是一个文件夹。根据您报告的错误消息,该尝试失败,因为您提供的路径不存在。我怀疑是输入错误 - 仔细查看您在 COPY 和 ECHO 行中使用的路径,并验证它确实存在。如果没有,则使用 MDMKDIR 来创建它。

注意 - 在追加到文件之前不需要创建空文件。 >> 如果文件不存在,将创建该文件。

有一种更简单、更快的方法来复制文件,跳过 N 行,使用更多。

@echo off
setlocal enableDelayedExpansion
set /a count=1
for %%a in ("C:\Users\%Username%\Desktop\conduct\*.txt") do (
  echo %%a         
  more +3 "%%a" >"someOtherPathThatExists\conduct!count!.txt"
  set /a count+=1
)
pause

此技术有以下限制:

  • <TAB>个字符转换成一串空格
  • 如果文件中的行数超过 64k,MORE 将失败(挂起)