Board logo

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

作者: bangyou    时间: 2024-1-10 19:11     标题: findstr命令怎样多条件OR查找?关键词包含空格

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

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

作者: _avatar_    时间: 2024-1-10 19:20

回复 1# bangyou


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

作者: bangyou    时间: 2024-1-10 20:47

回复 2# _avatar_

这个还是and关系啊,
作者: terse    时间: 2024-1-10 21:26

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

作者: 77七    时间: 2024-1-10 21:32

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

作者: _avatar_    时间: 2024-1-10 21:35

回复 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 了,直接举例说明呀。什么文字,想要什么结果?
作者: _avatar_    时间: 2024-1-10 21:36

回复 5# 77七


    这不就是他自己举的 AND 的例子嘛,真不懂他想表达什么。
作者: buyiyang    时间: 2024-1-10 21:38

事实上 findstr /c:"SSID" /c:"关键内容" 就是or,而不是你说的and
作者: bangyou    时间: 2024-1-10 21:49

回复 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"
作者: bangyou    时间: 2024-1-10 22:00

回复 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:"关键内容"
作者: aloha20200628    时间: 2024-1-10 22:06

本帖最后由 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"

作者: buyiyang    时间: 2024-1-10 22:11

本帖最后由 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
作者: bangyou    时间: 2024-1-10 22:13

回复 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
复制代码

作者: aloha20200628    时间: 2024-1-10 22:22

回复 13# bangyou

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

作者: bangyou    时间: 2024-1-10 22:25

回复 12# buyiyang


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

回复 13# bangyou

    试试这样?
  1. netsh wlan show profiles ChinaNet-NX08 key=clear | findstr /ic:"ssid 名称" /ic:"关键内容"
复制代码

作者: bangyou    时间: 2024-1-10 22:31

回复 14# aloha20200628


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

是不是因为中文原因,中文加/i 就可以
作者: aloha20200628    时间: 2024-1-10 22:59

回复 17# bangyou

纯P这把陈年老刀早被老东家冷落了,很难发现完整准确详尽的用法指南,倒是一帮中外玩家多年琢磨摆弄,留下一大套“旁门左道”,有人说这不过是一门“实验性技术”,就算是吧,也不错。你能摸到石头,就能过河,乐在其中吧...

作者: bangyou    时间: 2024-1-10 23:08

这样也可以,只是不知长度是不是固定的
  1. netsh wlan show profiles ChinaNet-NX08 key=clear |findstr /i /c:"名称                   :" /c:"关键内容"
复制代码
最终这样了,
  1. for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear | findstr -v "SSID" | findstr /I "名称  关键内容" && echo.
复制代码
CMD查看所有连接过的WIFI名字和密码




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2