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

File 使用批处理脚本删除文件中的特定行,file,batch-file,File,Batch File,我发现我的批处理脚本工作不正常。我想写一个函数来删除文件中的特定行,这是我的代码: :unmark type %MARKPATH% | findstr /B /V %1 > %MARKPATH_COPY% GOTO:EOF 是的,它可以工作,但它在新文件中写入新内容(没有特定行)。但是,我想覆盖一个现有的文件,而不是它。就像这样: :unmark type %MARKPATH% | findstr /B /V %1 > %MARKPATH% GOTO:EOF 但它

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

:unmark
    type %MARKPATH% | findstr /B /V %1 > %MARKPATH_COPY%
GOTO:EOF
是的,它可以工作,但它在新文件中写入新内容(没有特定行)。但是,我想覆盖一个现有的文件,而不是它。就像这样:

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

但它不工作,代码执行后文件是空的。你能帮我找出什么是问题以及如何解决它吗?

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


这种风格应该适用于:

@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
@echo关闭
设置“MARKPATH=%userprofile%\desktop\input.txt”
设置“MARKPATH\u COPY=%userprofile%\desktop\searchfile.txt”
findstr/B/V“%~1”“%MARKPATH\u COPY%”
移动/y“%MARKPATH\u COPY%”%MARKPATH%>nul

很好的解决方案,但是>nul做什么呢?编辑:我只是检查它,它不能正常工作。如果它包含findstr中提供的字符串,则会写入行。不删除它。>nul隐藏
MOVE
打印的消息,以保持屏幕清晰。findstr命令使用与示例相同的开关。那你的肯定也错了D
@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