HS_*_*_PT 3 batch-file findstr
我有50个名为like的文件CPUNAME_installer.txt,每个文件的内容类似于:
CPUNAME;11724;sdaasdasdasdasdasdasd
CPUNAME;1034;231asddasd
CPUNAME;1035;231asddasd
CPUNAME;10741;231asddasd
CPUNAME;10111;231asddasd
Run Code Online (Sandbox Code Playgroud)
...等等,数百行.我想检查是否有代码为11724,1034或1487的行,如果为true,则将整行传递给另一个文件夹,该文件在另一个文件夹中具有相同的名称.
现在我有这个有效的解决方案:
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
)
Run Code Online (Sandbox Code Playgroud)
...但是由于它为每个文件执行了六个命令,因此需要花费很多时间.
是否可以通过减少每个文件(或类似文件)的命令数来改善这一点?
阅读FINDSTR文档,(HELP FINDSTR从命令窗口输入) - 您将看到FINDSTR可以一次搜索多个字符串.
由于这个错误,你使用带有多个搜索字符串的/ I选项很好:为什么这个带有多个文字搜索字符串的FINDSTR示例找不到匹配?.
此外,无需将内容和管道TYPE到FINDSTR.您只需将文件名作为参数传递即可.
在您的情况下,由于您的字符串不包含空格,因此您的代码可能如下所示:搜索字符串由空格分隔.
for %%f in (*_installer.txt) do findstr /i "11724 1034 1487" "%%f" >"outfolder\%%f"
Run Code Online (Sandbox Code Playgroud)
小心以上.如果更改搜索字符串,则可能需要添加/L选项以强制将字符串视为字符串文字而不是正则表达式.
指定多个搜索的另一种方法是使用多个/C选项.除非使用该/R选项,否则始终将这些搜索字符串视为文字.
for %%f in (*_installer.txt) do findstr /i /c:"11724" /c:"1034" /c:"1487" "%%f" >"outfolder\%%f"
Run Code Online (Sandbox Code Playgroud)
您可能还想调查该/G:file选项.它允许您将搜索字符串放在单独的文本文件中,每行一个.您可以使用此技术方便地搜索许多字符串.
PS
使用FINDSTR时有许多未记录的陷阱.您可能有兴趣阅读Windows FINDSTR命令的未记录的功能和限制是什么?
| 归档时间: |
|
| 查看次数: |
7490 次 |
| 最近记录: |