使用批处理脚本删除文件中的特定行

时间:2013-08-24 09:36:50

标签: file batch-file

我发现我的批处理脚本无法正常工作。我想编写一个删除文件中特定行的函数,这是我的代码:

:unmark
    type %MARKPATH% | findstr /B /V %1 > %MARKPATH_COPY%
GOTO:EOF

是的,它可以工作,但它会在新文件中写入新内容(没有特定行)。但是,我想要覆盖现有文件而不是它。像那样:

:unmark
    type %MARKPATH% | findstr /B /V %1 > %MARKPATH%
GOTO:EOF

但它没有用,代码执行后文件为空。你能帮我弄清楚什么是问题以及如何解决它?

2 个答案:

答案 0 :(得分:1)

这种风格应该有效:

@echo off
set "MARKPATH=%userprofile%\desktop\input.txt"
set "MARKPATH_COPY=%userprofile%\desktop\searchfile.txt"

findstr /B /V "%~1" <"%markpath%" > "%MARKPATH_COPY%"
move /y "%MARKPATH_COPY%" "%markpath%" >nul

答案 1 :(得分:0)

我想我找到了解决问题的方法(可能不实用,但有效)

:unmark
    set LASTPATH=%CD%
    cd %MARKPATH%
    type %MARKFILE% | findstr /B /V %1 > %MARKFILECOPY%
    del %MARKFILE%
    ren %MARKFILECOPY% %MARKFILE%
    cd %LASTPATH%
GOTO:EOF