Batch file 批处理脚本-从文本文件中删除特定行

Batch file 批处理脚本-从文本文件中删除特定行,batch-file,automation,Batch File,Automation,假设有两个文件Temp1和Temp2包含以下数据= Temp1.txt: xxxx xxxxx xxxxxxxx xxxxx xxxxx yyyyy yyyy yyy yyyyyyy yyyy yyy zz zzzzz zz zzzz zzz zzz zz z z Temp2.txt: xxxx xxxxx xxxxxxxx xxxxx xxxxx zz zzzzz zz zzzz zzz zzz zz z z aaaa aa aaaa aa aaaaa aaa aaaaaa 要求删除Tem

假设有两个文件Temp1和Temp2包含以下数据=

Temp1.txt:

xxxx xxxxx xxxxxxxx xxxxx xxxxx
yyyyy yyyy yyy yyyyyyy yyyy yyy
zz zzzzz zz zzzz zzz zzz zz z z
Temp2.txt:

xxxx xxxxx xxxxxxxx xxxxx xxxxx
zz zzzzz zz zzzz zzz zzz zz z z
aaaa aa aaaa aa aaaaa aaa aaaaaa
要求删除Temp1中与Temp2匹配的行。并可能将其保存在另一个文件中。 所以,基本上输出应该是这样的:

Temp.txt:

yyyyy yyyy yyy yyyyyyy yyyy yyy
到目前为止,我得到的是:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "Delims=" %%A IN ('type "Temp2.txt"') DO (
    SET STRING=%%A
    FINDSTR /V /C:%STRING% "Temp1.txt" > Temp.txt
)

但是,我认为这段代码将保留匹配的数据,而不是删除。需要更正。

您甚至不需要为此编写脚本。这是一个命令:

findstr /x /v /G:temp2.txt temp1.txt >temp.txt
/x比较整条线

/v只打印不匹配的行


/g使用文件temp2.txt获取搜索字符串

您甚至不需要脚本。这是一个命令:

findstr /x /v /G:temp2.txt temp1.txt >temp.txt
/x比较整条线

/v只打印不匹配的行


/g使用文件temp2.txt来获取searchstrings,FINDSTR本身应该是一个很好的解决方案。阅读文档时,人们会认为下面的文字搜索应该可以工作

findstr /vlxg:"temp2.txt" "temp1.txt" >temp.txt
但以下情况会使上述情况变得不可靠

缺陷 文字搜索可能需要\和/或转义为\\和\ 解决方案是执行正则表达式搜索。但这要求必须转义temp2.txt中的正则表达式元字符。这对我来说是一个完美的任务。BAT是一个混合JScript/批处理脚本,从XP开始在任何Windows机器上本机运行

jrepl "[.*^$[\\]" "\$&" /f "temp2.txt"|findstr /rvxg:/ "temp1.txt" >"temp.txt"
以上工作如下

JREPL命令转义temp2.txt中的元字符,并通过管道将输出传输到FINDSTR

FINDSTR/R选项将所有搜索字符串视为正则表达式

/V选项会抑制匹配行,并打印非匹配行

/X选项意味着搜索字符串必须与整行匹配

/G:/option指示FINDSTR从管道中的stdin读取搜索字符串

JREPL | FINDSTR解决方案具有以下限制,所有这些都是由于FINDSTR行为造成的


temp2.txt中的所有行都必须是FINDSTR本身应该是一个很好的解决方案。阅读文档时,人们会认为下面的文字搜索应该可以工作

findstr /vlxg:"temp2.txt" "temp1.txt" >temp.txt
但以下情况会使上述情况变得不可靠

缺陷 文字搜索可能需要\和/或转义为\\和\ 解决方案是执行正则表达式搜索。但这要求必须转义temp2.txt中的正则表达式元字符。这对我来说是一个完美的任务。BAT是一个混合JScript/批处理脚本,从XP开始在任何Windows机器上本机运行

jrepl "[.*^$[\\]" "\$&" /f "temp2.txt"|findstr /rvxg:/ "temp1.txt" >"temp.txt"
以上工作如下

JREPL命令转义temp2.txt中的元字符,并通过管道将输出传输到FINDSTR

FINDSTR/R选项将所有搜索字符串视为正则表达式

/V选项会抑制匹配行,并打印非匹配行

/X选项意味着搜索字符串必须与整行匹配

/G:/option指示FINDSTR从管道中的stdin读取搜索字符串

JREPL | FINDSTR解决方案具有以下限制,所有这些都是由于FINDSTR行为造成的


temp2.txt中的所有行都必须为空。这应该与/L开关一起工作,但这是不可靠的!请参阅为什么不能使用简单的FINDSTR命令。添加/L开关时应该可以这样做,但这是不可靠的!请参阅为什么不能使用简单的FINDSTR命令。