批处理删除文本文件中的一行

3

我看到在批处理中,要从文本文件中删除特定行,需要使用findstr来查找该行,然后将其删除。但是如果您不知道该行如何处理呢?我有另一个程序,它会填充该文件,批处理必须删除第一行。有谁知道如何做吗?

我尝试了一些通过索引读取一行,然后使用findstr的方法,但它不起作用:

@echo off
setlocal EnableDelayedExpansion
set count=1
for /f "tokens=*" %%a in (test.txt) do (
if !count! equ 1 (set "TIMER=%%a")
if !count! equ 1 (type test.txt | findstr /v %TIMER%)
set /a count+=1
)
echo %TIMER%
timeout %TIMER%
for /f "tokens=*" %%a in (test.txt) do (
echo %%a
)
pause

它告诉我:FINDSTR:命令行错误(在文件行循环和查找特定行的代码片段是从互联网上找到的)
所以问题在哪里?或者难道有人知道类似于delete(x)并且它删除该行吗?就是需要一个索引... ^^'
(最后的for循环用于检查是否已删除该行)
提前感谢任何帮助!

2
最简单的方法来复制一个文本文件,但不包括第一行,只要转换其中包含的制表符为空格不是问题,就是:@"%__AppDir__%more.com" +1 "test.txt" > "modifiedtest.txt" - Compo
3
或者 >去除首行.txt <测试.txt (set/p"="&%__APPDIR__%findstr.exe /R "^") - ScriptKidd
1
@HackingAddict1337:太聪明了。你想把它转化为一个答案吗? - Stephan
非常感谢HackingAddict1337和Compo两位的帮助,我已经得到了解决方案!再次感谢!^^ - Quantum Sushi
2个回答

3
从文件中删除前 n 行,而不将制表符转换为空格:
@echo off
>RemoveFirstLine.txt <test.txt (
    FOR /L %%N in (1 1 1) do set/p"=" SKIP N lines
    %__APPDIR__%findstr.exe /R "^"
)

这里的FINDSTR将指针从标准输入移动, 而FINDMORE则不会。


谢谢!我已经找到了解决方案,但这仍然很有帮助^^ - Quantum Sushi

2
您的代码主要无法正常工作是因为缺少延迟扩展

但有更简单的方法实现您的目标。如果Compo的建议(more.com" +1 "test.txt" > "modifiedtest.txt")对您不起作用(需要保留制表符或需要删除第一行以外的另一行),则以下方法可能适合您:

@echo off
setlocal
set file=test.txt
set lineToDelete=1
(for /f "tokens=1* delims=:" %%a in ('findstr /N "^" "%file%" ^|findstr /bv "%lineToDelete%:"') do echo/%%b) > "%file%.tmp
move /y "%file.tmp%" "%file%"

非常感谢,这个有效!我一直在寻找一个好的时机,但最终没有解决方案,你救了我哈哈! - Quantum Sushi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接