批处理文件,按数字删除行

批处理文件,按数字删除行

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

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

我知道我可以越过界限,FOR但删除部分对我来说仍然很棘手

我读过findstr,它应该会更好,但也找不到任何可以删除的东西

现在我读到

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

它将文件保存到没有找到的字符串的新文件中...但添加了

“-----------------%WINDIR%\system32\drivers\etc\hosts”

一开始,但是当我尝试

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

这是行不通的...

答案1

您的命令:

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

添加------------------%WINDIR%\system32\drivers\etc\hosts到文件顶部,因为这是默认输出的一部分FIND。尝试不使用重定向并查看。

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可以用来 cat 文件,重定向其输出通过 FIND,并且它不应该显示文件/路径:

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

当然,这也可以重定向到新文件:

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

答案2

尝试Grep 的 Win32 移植

假设您想清除包含xyz以下命令的任何行,它将执行您需要的操作。

grep -v xyz inputfile.txt > outputfile.txt

如果您想要匹配整行,也可以使用正则表达式。正如 MDMarra 在评论中所说,请解释一下您要做什么。

ps 将输出通过管道传输回原始文件可能不是一件好事,尤其是在实验时,尤其是当它是系统文件时。

相关内容