找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 89647|回复: 26

[文本处理] [已解决]批处理命令findstr怎样搜索指定文件匹配开头和结尾?

[复制链接]
发表于 2015-10-23 20:12:34 | 显示全部楼层 |阅读模式
本帖最后由 freesoft00 于 2015-10-24 12:59 编辑

dir /b |findstr /i "\<win 7z\>"
我的本意是想搜索目录中所有win开头,7z结尾的文件

另外一个是比如文件内容如下
Microsoft Visual C++ 2005 Redistributable (x64)
Microsoft Visual C++ 2012 x86 Minimum Runtime
我要搜索Microsoft 开头,(x64) 结尾,这个应该如何用findstr匹配呢?
这个问题是我使用wmic命令得到的结果,它导出的文本是unicode码,这个批处理无法处理,而且每行的文本也许有不等的空格。
不知道wmic导出的结果是否可以是ansi码?空格的问题如何解决

两个例子是一个问题,我只是举例说一下,防止我表述不清楚。
 楼主| 发表于 2015-10-23 20:31:59 | 显示全部楼层
本帖最后由 freesoft00 于 2015-10-23 20:33 编辑
  1. "^win.*7z$"
复制代码
好像知道了,是不是这样
  1. “^Microsoft.*(x64)$"
复制代码
这样的关键字是吧?
发表于 2015-10-23 20:42:38 | 显示全部楼层
素的!
 楼主| 发表于 2015-10-23 20:43:02 | 显示全部楼层
本帖最后由 freesoft00 于 2015-10-23 21:12 编辑

“^Microsoft.*(x64)$" 搜索Microsoft Visual C++ 2005 Redistributable (x64)不行,因为这个文本文件的这一样后面还有多余的空格,不知道是不是因为空格的影响无法搜索到

我又测试,把多余的空格删除也不行,看来是我的关键词没有写对

唉,没有看,我的文本不是很ansi码,改了就好了。
 楼主| 发表于 2015-10-23 20:49:44 | 显示全部楼层
再多问一个:
askjq123lkjl3412sdf9
类似的纯字母和数字组合的目录名称,字符格式是20,如何dir/ad findstr匹配出来
发表于 2015-10-23 21:00:56 | 显示全部楼层
es.exe 搜索很快的,也支持正则。
可以试试。

评分

参与人数 1技术 +1 收起 理由
freesoft00 + 1 感谢!

查看全部评分

发表于 2015-10-23 21:05:45 | 显示全部楼层
findstr 不支持完整的正则功能。
 楼主| 发表于 2015-10-23 21:13:28 | 显示全部楼层
回复 6# 依山居

多谢,我只是想在没有第三方的时候看是否可以实现
发表于 2015-10-23 21:33:51 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. set "a="
  3. for /l %%a in (1 1 20) do set "a=!a![0-9a-z]"
  4. dir /b | findstr /ix "!a!"
  5. pause
复制代码

评分

参与人数 2技术 +2 收起 理由
freesoft00 + 1 感谢!
依山居 + 1 1

查看全部评分

发表于 2015-10-23 21:47:19 | 显示全部楼层
回复 9# CrLf


    findstr 不支持[0-9]* 这样匹配是吧?
 楼主| 发表于 2015-10-23 21:49:16 | 显示全部楼层
回复 9# CrLf


    感谢!不过提示:FINDSTR: 搜索字符串太长
 楼主| 发表于 2015-10-23 21:53:58 | 显示全部楼层
回复 9# CrLf


    我搜索文本的问题,文本是用wmic导出的。
wmic product get name>22.txt
但是wmic命令导出的是unicode码,是否可以导出为ansi码不用第三方软件的情况下?
导出的文件每行的末尾有不等的空格,这个在用(x64)$这个关键词的时候就无法匹配到了,是否可以去掉空格?
上面是导出为文本然后for配合findstr过来,如果是直接用|后面接findstr如何把后面多余的空格解决掉
wmic product get name|findstr /i "^Microsoft.*(x64)$"
发表于 2015-10-23 22:07:02 | 显示全部楼层
回复 5# freesoft00
  1. //&cls&dir /b |cscript -nologo -e:jscript "%~f0"&pause&exit/b
  2. while(!WScript.StdIn.AtEndOfStream) {
  3.     var str = WScript.StdIn.ReadLine()
  4.     if (/^[0-9a-z]{20}$/i.test(str))WSH.Echo(str);
  5. }
复制代码
发表于 2015-10-23 22:15:40 | 显示全部楼层
回复 12# freesoft00


    findstr /i "^Microsoft.*(x64)[^a-z0-9]*$"

评分

参与人数 1技术 +1 收起 理由
freesoft00 + 1 感谢!

查看全部评分

 楼主| 发表于 2015-10-23 22:20:09 | 显示全部楼层
回复 14# pcl_test

确实可以了。看来还是自己思想不灵活呀。想不到这样去处理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 12:50 , Processed in 0.018362 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表