Batch file 删除所有不包含“的行”;2020年“;通过批处理文件

Batch file 删除所有不包含“的行”;2020年“;通过批处理文件,batch-file,cmd,find,Batch File,Cmd,Find,我有一个生成的txt文件。此文件具有某些不相关的行,需要排除这些行。需要删除的每一行不包含字符串“2020”。我想删除这些行,同时保留所有其他行 所以像这样的txt文件: aaa2020 aaa2019 aaa2018 aaa2017 aaa2020 变成这样: aaa2020 aaa2019 aaa2018 aaa2017 aaa2020 我试过了 findstr /V "2019" infile.txt > outfile.txt 但是,这会变得效率低下,

我有一个生成的txt文件。此文件具有某些不相关的行,需要排除这些行。需要删除的每一行不包含字符串“2020”。我想删除这些行,同时保留所有其他行

所以像这样的txt文件:

aaa2020
aaa2019
aaa2018
aaa2017
aaa2020
变成这样:

aaa2020
aaa2019
aaa2018
aaa2017
aaa2020
我试过了

findstr /V "2019" infile.txt > outfile.txt

但是,这会变得效率低下,因为我需要对每个错误的序列使用该命令:(201920182017…

只需在不使用
/V
的情况下使用
findstr
,并将输出重定向到另一个文件:

findstr "2020" infile.txt>output.txt
有关命令用法的详细信息,请参见
findstr/?
。非常具体地关注这一行:

/V只打印不包含匹配项的行。


所以你所做的就是搜索所有东西,不包括“2019”等等。如果这是唯一要排除的东西,那就好了。但是您只需要包含一件事,因此只需查找匹配条件并输出结果。

由于您的搜索模式没有特殊要求,您可能更喜欢该实用程序。打开命令提示窗口,键入
帮助查找
,按ENTER键并读取其使用信息

使用这些信息,您可以使用:

@find“2020”<“infle.txt”>“outfile.txt”
或为获得绝对稳健性:

@((“%\uuuuu AppDir\uuuuuu%find.exe”“2020”)0“Y:\SomeLocation\outfile.txt”

这应该可以在or之间直接传输。

这将只找到包含“2020”的行

powershell -NoLogo -NoProfile -Command ^
    "(Select-String '2020' 'C:\src\t\infile.txt').Line |" ^
        "Out-File 'C:\src\t\outfile.txt' ascii"
如果你想一次得到所有的,你可以

powershell -NoLogo -NoProfile -Command ^
    "(Select-String '20(17|18|19|20)' 'C:\src\t\infile.txt').Line |" ^
        "Out-File 'C:\src\t\outfile.txt' ascii"