Batch file 一种类型,带有两个findstr(和管道输出)
我有50个文件名为:Batch file 一种类型,带有两个findstr(和管道输出),batch-file,findstr,Batch File,Findstr,我有50个文件名为:CPUNAME\u installer.txt,每个文件的内容如下: CPUNAME;11724;sdaasdasdasdasdasdasd CPUNAME;1034;231asddasd CPUNAME;1035;231asddasd CPUNAME;10741;231asddasd CPUNAME;10111;231asddasd …等等,数百行。我想检查是否有代码为11724、1034或1487的行,如果为真,则将整行传输到另一个文件夹中具有相同名称的另一个文本文件
CPUNAME\u 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
)
…但它需要很多时间,因为它对每个文件执行六个命令
是否可以通过减少每个文件(或类似文件)的命令数量来改善这一点?阅读FINDSTR文档,(从命令窗口键入
帮助FINDSTR
)-您将看到FINDSTR可以一次搜索多个字符串
由于以下错误,您最好将/I选项用于多个搜索字符串:
此外,无需键入内容和管道到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
选项。它允许您将搜索字符串放在单独的文本文件中,每行一个。使用此技术可以方便地搜索许多字符串
p.S.
在使用FINDSTR时,有许多未记录的Gotcha。你可能对阅读感兴趣