首页 文章

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

提问于
浏览
1

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

我希望我的问题很明确:)

格雷茨巴夫

1 回答

  • 2

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

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

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

    使用MORE可以更简单,更快速地复制文件,跳过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行,则更多失败(挂起)

相关问题