Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 一种类型,带有两个findstr(和管道输出)_Batch File_Findstr - Fatal编程技术网

Batch file 一种类型,带有两个findstr(和管道输出)

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的行,如果为真,则将整行传输到另一个文件夹中具有相同名称的另一个文本文件

我有50个文件名为:
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。你可能对阅读感兴趣