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

[文本处理] [已解决]批处理如何查找当前目录及子目录含特定字符串的文件名并输出?

[复制链接]
发表于 2017-3-8 10:51:54 | 显示全部楼层
回复 15# kaze


    完整代码发出来看看
 楼主| 发表于 2017-3-8 15:01:17 | 显示全部楼层
本帖最后由 kaze 于 2017-3-8 15:17 编辑

回复 16# GNU
  1. for /f "tokens=*" %%i in ('dir /a-d /b /s *.txt') do (
  2.     echo %%~nxi | findstr /i "副本 0 1 2 3 4 5 6 7 8 9" >nul 2>&1 && echo %%i
  3. echo %%~nxi | findstr /c:"--" /c:"'" >nul 2>&1 && echo %%i)
  4. pause
复制代码
没有加入空格查找
发表于 2017-3-8 21:21:05 | 显示全部楼层
回复 17# kaze


总共多少个文件需要处理?
这个代码的速度大概是每分钟处理几个文件?
 楼主| 发表于 2017-3-9 12:18:44 | 显示全部楼层
回复 18# GNU


    测试了2981个文件,将近两分半分钟。
发表于 2017-3-9 15:32:35 | 显示全部楼层
回复 19# kaze


    还算可以吧,不到3分钟啊。你需要优化到什么级别?
 楼主| 发表于 2017-3-10 11:03:01 | 显示全部楼层
回复 20# GNU
优化到一分钟内,可以么?
能不能加上空格查找?
 楼主| 发表于 2017-3-10 19:34:40 | 显示全部楼层
回复 20# GNU
经过测试,还是使用3楼代码,速度快多了,
能不能加上空格和重名文件名查找?
发表于 2017-3-11 02:17:14 | 显示全部楼层
本帖最后由 WHY 于 2017-3-11 21:06 编辑
  1. @if (0)==(0) echo off
  2. dir /b /a-d /s *.txt | cscript //nologo //e:jscript "%~f0"
  3. pause & goto :EOF
  4. @end

  5. var str = WSH.StdIn.ReadAll();
  6. var arr = str.split('\r\n'), len = arr.length;
  7. var map = [];

  8. for(var i=0; i<len; i++) {
  9.         var key = arr[i].replace(/.+\\(.+)$/, '$1').toLowerCase();
  10.         map[key] ? map[key].push(arr[i]) : map[key] = [arr[i]]
  11. }

  12. for(key in map) {
  13.         if(map[key].length > 1) WSH.Echo('重复:\r\n' + map[key].join('\r\n'))
  14. }

  15. var m = str.match(/.*(?:[\uFF10-\uFF19\uFF21-\uFF3A ']|副本|--)[^\\]*\r\n/ig);
  16. if(m) WSH.Echo('指定字符:\r\n' + m.join(''))
复制代码

评分

参与人数 1技术 +1 收起 理由
kaze + 1 谢谢

查看全部评分

 楼主| 发表于 2017-3-13 12:08:14 | 显示全部楼层
回复 23# WHY
非常感谢,可惜不太懂,请问删除重复检测,是否只需要删除9-17行?,加上其他字符该脚本也管用,前面的[\uFF10-\uFF19\uFF21-\uFF3A ']表示什么意思呢?
如果我在最前面加上说明文字echo怎么会出错呢?
发表于 2017-3-13 17:00:49 | 显示全部楼层
回复 24# kaze


1.删除 7-18 行即可
2. \uFF10-\uFF19 表示 Unicode 字符中的全角数字,\uFF21-\uFF3A 表示 Unicode 字符中的全角字母(大写),等效于 [0-9A-Z ']
3.代码是用混编方式写的,说明性文字需插在第1~2行之间

如果不需要查找重名文件,或许可以这样

  1. set "s=1 2 3 4 5 6 7 8 9 0 q w e r t y u i o p a s d f g h j k l z x c v b n m ' 副本 --"
  2. dir /b /a-d /s *.txt | findstr /r /i /c:".* [^\\]*$" /c:".*%s: =[^\\]*$" /c:".*%[^\\]*$"
复制代码

评分

参与人数 1技术 +1 收起 理由
kaze + 1 谢谢

查看全部评分

 楼主| 发表于 2017-3-14 11:43:16 | 显示全部楼层
回复 25# WHY

谢谢,经过验证,23楼和25楼都很不错的代码,受教了!
发表于 2017-3-30 17:01:30 | 显示全部楼层
PowerShell 可以这样:
  1. dir e:\Test -Include *.txt -Recurse | ?{$_ -is [IO.FileInfo]} | group{$_.Name} | ?{$_.Count -gt 1} | %{'重名:';$_.Group|%{$_.FullName}}
  2. dir e:\Test -Include '*[0-9a-z '']*.txt', '*副本*.txt', '*--*.txt' -Recurse | %{'指定字符:'}{ $_.FullName }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 14:51 , Processed in 0.020230 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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