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

时间:2015-01-16 12:20:43

标签: batch-file

我在循环中保存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文件我需要做很多事情;)

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

Greetz Baff

1 个答案:

答案 0 :(得分:2)

  

“DOS提示我的目标文件夹不存在,但是我   刚刚在第一个for循环中使用COPY NUL创建它。“

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

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

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

@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,则更多失败(挂起)