batch file,按行号删除

我有这个: set myvar = ^J | FIND /N /I "texttolookfor" %WINDIR%\system32\drivers\etc\hosts set myvar = ^J | FIND /N /I "texttolookfor" %WINDIR%\system32\drivers\etc\hosts现在我有它罚款的文本行

我怎样才能从文件中删除这些行?

我知道我可以用FOR运行,但是删除部分对我来说仍然很棘手

我读了findstr ,它认为是更好的,但也找不到任何东西删除

现在我读了

 FIND /V "texttolookfor" %WINDIR%\system32\drivers\etc\hosts > newfile 

它将文件保存到一个新的没有find的string…但添加

“——————%WINDIR%\ SYSTEM32 \ DRIVERS \等\主机”

在开始,但是当我尝试

 FIND /V "texttolookfor" %WINDIR%\system32\drivers\etc\hosts > %WINDIR%\system32\drivers\etc\hosts 

这是行不通的…

你的命令:

 FIND /V "texttolookfor" %WINDIR%\system32\drivers\etc\hosts > newfile 

------------------%WINDIR%\system32\drivers\etc\hosts到文件的顶部,因为这是FIND默认输出的一部分。 尝试没有redirect,看看。

 FIND /V "texttolookfor" %WINDIR%\system32\drivers\etc\hosts ---------- C:\WINDOWS\SYSTEM32\DRIVERS\ETC\HOSTS # Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. ... 

TYPE可用于捕获文件, 通过 FINDredirect其输出,而不应显示文件/path:

 TYPE %WINDIR%\system32\drivers\etc\hosts | FIND /V "texttolookfor" 

当然,这也可以redirect到一个新的文件:

 TYPE %WINDIR%\system32\drivers\etc\hosts | FIND /V "texttolookfor" > newfile 

尝试Grep的Win32端口

假设你想清除任何包含xyz的行,下面的命令将执行你所需要的。

 grep -v xyz inputfile.txt > outputfile.txt 

如果你想匹配一整行,这也可以使用正则expression式。 正如MDMarra在评论中已经说过的那样,请解释一下你正在做的事情的大局。

ps将输出重新映射到原始文件上,可能不是一件好事,特别是在试验时,尤其是在系统文件时。