一种类型,带有两个findstr(并通过管道输出)

3

我有50个文件,命名类似于:CPUNAME_installer.txt,每个文件的内容大致如下:

CPUNAME;11724;sdaasdasdasdasdasdasd
CPUNAME;1034;231asddasd
CPUNAME;1035;231asddasd
CPUNAME;10741;231asddasd
CPUNAME;10111;231asddasd

我希望检查是否有代码为11724、1034或1487的行,并且如果是真的,将整行传输到另一个文件夹中具有相同名称的另一个文本文件中。这涉及几百行代码。

目前我有一个可行的解决方案:

for %%f in (*_installer.txt) do (
    type %%f | findstr /I /C:"11724">>outfolder\%%f
    type %%f | findstr /I /C:"1034">>outfolder\%%f
    type %%f | findstr /I /C:"1487">>outfolder\%%f
)

...但是每个文件需要执行六个命令,所以这需要花费很多时间。

是否有可能通过减少每个文件的命令数量(或类似方法)来改善这种情况?

1个回答

5

阅读FINDSTR文档(从命令窗口键入HELP FINDSTR)- 您将看到FINDSTR可以一次搜索多个字符串。

很好,您正在使用/I选项与多个搜索字符串,因为存在此错误:为什么此带有多个文字搜索字符串的FINDSTR示例找不到匹配项?

此外,无需键入内容并将其管道传递给FINDSTR。您可以简单地将文件名作为参数传递。

在您的情况下,由于您的字符串不包含空格,因此您的代码可能如下所示:搜索字符串由空格分隔。

for %%f in (*_installer.txt) do findstr /i "11724 1034 1487" "%%f" >"outfolder\%%f"

以上内容需要注意。如果您更改搜索字符串,则可能需要添加/L选项,以强制将字符串视为字符串字面量而不是正则表达式。

指定多个搜索的另一种方法是使用多个/C选项。这些搜索字符串始终被视为文字,除非使用/R选项。

for %%f in (*_installer.txt) do findstr /i /c:"11724" /c:"1034" /c:"1487" "%%f" >"outfolder\%%f"

你可能还想了解 /G:file 选项。它允许你将搜索字符串放入一个单独的文本文件中,每行一个。使用这种技术可以方便地搜索 多个 字符串。
附注:
使用 FINDSTR 时有许多未记录的 陷阱。你可能会有兴趣阅读 Windows FINDSTR 命令的未记录功能和限制是什么?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接