[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] findstr命令怎样多条件OR查找?关键词包含空格

多条件 OR查找 关键词包含空格,例如
  1. findstr /I /R "\关键a \关键b"
复制代码
上面的在没有空格可以,但是有空格就不行了,

在如下,多条件可以包含空格,但只能AND查找
  1. findstr /c:"SSID" /c:"关键内容"
复制代码

回复 1# bangyou


    用管道就可以了呀
  1. findstr /c:"SSID" | findstr /c:"关键内容"
复制代码

TOP

回复 2# _avatar_

这个还是and关系啊,

TOP

试一下 ||
  1. findstr /ic:"a b" a.txt||findstr /ic:"b c" a.txt
复制代码

TOP

举个例子应该更好让人理解
大概需要这样?
  1. @echo off
  2. echo 1 23|findstr /c:"1 2" /c:"3" && echo ok
  3. pause
复制代码
bat小白,请多指教!谢谢!

TOP

回复 3# bangyou


   我理解的 AND ,就是同时满足两个条件, OR 就是满足条件之一,例如有文件 123.txt:
  1. 123 234
  2. 144
  3. 12345 3434
  4. 1345
  5. 2414
  6. 452
  7. 431
  8. 4325 345
  9. 12313
  10. 313 45 32321
复制代码
想查找同时满足有  “3 4” 和 "5 3" 的行:
  1. type 123.txt | findstr /c:"5 3" | findstr /c:"3 4"
复制代码
结果只有一行,即最后一行
  1. 313 45 32321
复制代码
如果是要查找有 “34” 或 “5 3”的行:
  1. type 123.txt | findstr /c:"5 3" /c:"3 4"
复制代码
结果有三行,分别为:
  1. 12345 3434
  2. 4325 345
  3. 313 45 32321
复制代码
没明白你的需求,你别AND  OR 了,直接举例说明呀。什么文字,想要什么结果?

TOP

回复 5# 77七


    这不就是他自己举的 AND 的例子嘛,真不懂他想表达什么。

TOP

事实上 findstr /c:"SSID" /c:"关键内容" 就是or,而不是你说的and

TOP

回复 7# _avatar_

aa bb cc  gg  ...
aa cc  bb  ...
dd

想一句筛选出"aa cc  bb   ..." 和 ”dd“,特征是含有 "aa  cc" 或 "dd"

根据特征加了一个 -v
  findstr /I /R "aa dd" | findstr  -v  "gg"

TOP

回复 6# _avatar_


netsh wlan show profiles ChinaNet-NX08 key=clear | findstr /c:"SSID 名称" /c:"关键内容"

为什么上面的数据可以,换了数据只能出来一个
netsh wlan show profiles ChinaNet-NX08 key=clear > 123.txt
type 123.txt | findstr /c:"SSID 名称" /c:"关键内容"

TOP

本帖最后由 aloha20200628 于 2024-1-10 22:27 编辑

回复 9# bangyou

用楼主的示例
aa bb cc  gg  ...
aa cc  bb  ...
dd
存为test.txt
用如下一行流代码试试,关键是 /l 参数和 \ 掩码空格。
findstr /lc:"aa\ c" /lc:"dd" "test.txt"

TOP

本帖最后由 buyiyang 于 2024-1-11 11:11 编辑

回复 10# bangyou

findstr对于多字节字符的bug之一
netsh wlan show profiles ChinaNet-NX08 key=clear | findstr /r /c:"SSID 名称" /c:"关键内容"
加上/r或/i可解


补充几个示例供参考:
  1. echo,補|findstr "a"
  2. echo,補|findstr /r "a"
  3. echo,補|findstr "[a]"
  4. echo,a|findstr "[補]"
  5. echo,你 好|findstr "你 好"
  6. echo,你好|findstr /c:"你" /c:"好"
  7. echo,你好|findstr /r "你 好"
  8. echo,你好|findstr /i "你 好"
复制代码
注:a的gb2312编码为61,補的gb2312编码为D161

TOP

回复 11# aloha20200628

我之前用数据试过的
用在例子上可以,难道是我数据有问题
  1. 接口 无线网络连接 上的配置文件 ChinaNet-NX08:
  2. =======================================================================
  3. 已应用: 所有用户配置文件
  4. 配置文件信息
  5. -------------------
  6.     版本                   : 1
  7.     类型                   : 无线局域网
  8.     名称                   : ChinaNet-NX08
  9.     控制选项               :
  10.         连接模式           : 自动连接
  11.         网络广播           : 只在网络广播时连接
  12.         AutoSwitch         : 请勿切换到其他网络
  13. 连接设置
  14. ---------------------
  15.     SSID 数目              : 1
  16.     SSID 名称              :“ChinaNet-NX08”
  17.     网络类型               : 结构
  18.     无线电类型             : [ 任何无线电类型 ]
  19.     供应商扩展名           : 不存在
  20. 安全设置
  21. -----------------
  22.     身份验证         : WPA2 - 个人
  23.     密码                 : CCMP
  24.     安全密钥               : 存在
  25.     关键内容            : 123456789
复制代码

TOP

回复 13# bangyou

订正代码如下就可以了。
  1. findstr /lc:"aa\ c" /lc:"dd" "test.txt"
复制代码

TOP

回复 12# buyiyang


    确实,只是,如果是
出来的数据是
  1.     名称                   : ChinaNet-NX08
  2.     关键内容            : 123456789
复制代码
我现在用是的,netsh wlan show profiles ChinaNet-NX08 key=clear | findstr -v "SSID" | findstr /I /R "名称 关键内容"

TOP

返回列表