2013-08-24 133 views
0

我发现我的批处理脚本工作不正常。我想写它删除特定的线路在文件中的函数,这是我的代码:使用批处理脚本删除文件中的特定行

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

是的,它的工作原理,但它在一个新的文件中写入新的内容(没有具体的线)。但是,而不是它,我想覆盖现有的文件。像这样:

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

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

回答

0

我想我找到了解决我的问题(也许并不实用,但它的工作)

:unmark 
    set LASTPATH=%CD% 
    cd %MARKPATH% 
    type %MARKFILE% | findstr /B /V %1 > %MARKFILECOPY% 
    del %MARKFILE% 
    ren %MARKFILECOPY% %MARKFILE% 
    cd %LASTPATH% 
GOTO:EOF 
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 
+0

的最佳解决方案,但到底是什么> NUL吗?编辑:我只是检查出来,它不能正常工作。如果它包含findstr中提供的字符串,则会写入行。不要删除它。 – Andrius

+0

> nul隐藏'MOVE'打印的信息以保持屏幕清晰。 findstr命令使用与您的示例相同的开关。那时你也一定是错的。 :d – foxidrive

相关问题