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

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

[复制链接]
发表于 2017-2-25 17:58:56 | 显示全部楼层 |阅读模式
本帖最后由 kaze 于 2017-3-14 11:44 编辑

要求:查找检查当前目录及子目录的txt文件名(检查文件名,不检查目录),查找出 含同名文件名,含字符 空格 ,两个小横号--,符号'   全角字符【数字字母】,文字串副本。提取成文档或echo一下。
  1. @echo off
  2. for /f "tokens=*" %%i in ('dir /a-d /b /s *.txt^|findstr /i "副本"') do (echo %%i)
  3. pause
复制代码
问题:1。没有找到findstr查找空格的方法
2. 命令dir /a-d /b /s *.txt显示了目录名,去掉/s又无法检查子目录。

不知道怎么解决,谢谢大家查看!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2017-2-25 18:06:55 | 显示全部楼层
echo "bat home" | findstr /c:"bat home"
这样可以查找包含空格的字符串
发表于 2017-2-25 18:09:43 | 显示全部楼层
先把文件列表输出到一个临时文件,再用findstr查找这个临时文件。
  1. @echo off
  2. (for /f "tokens=*" %%i in ('dir /a-d /b /s *.txt') do (
  3.     echo %%~nxi
  4. ))>1.log
  5. findstr "副本" 1.log
  6. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2017-2-25 18:16:02 | 显示全部楼层
findstr /c " " 1.log 查找空格不行啊,还有其他字符怎么解决呢?
发表于 2017-2-25 18:37:15 | 显示全部楼层
回复 4# kaze


    请注意观察2楼的代码,把你的/c后面的空格改成冒号。
 楼主| 发表于 2017-2-25 18:42:34 | 显示全部楼层
本帖最后由 kaze 于 2017-2-25 18:48 编辑

回复 5# GNU

谢谢,解决了一部分,全角数字字母怎么查找?最后导出如何再加上路径呢?加一个要求查出同名文件怎么弄?谢谢
发表于 2017-2-25 19:57:30 | 显示全部楼层
回复 6# kaze


    请举例说明你想查找什么全角数字字母?
 楼主| 发表于 2017-2-25 20:20:51 | 显示全部楼层
回复 7# GNU

主要是所有的全角 数字0-9
发表于 2017-2-25 20:57:22 | 显示全部楼层
回复 8# kaze


    请举个真实例子,我测试一下代码。
 楼主| 发表于 2017-2-25 21:25:19 | 显示全部楼层
本帖最后由 kaze 于 2017-2-25 21:28 编辑

回复 9# GNU
比如
ABOOK-1.txt
ABOOK-1.txt
ABOOK-1 - 副本.txt
A-BO-O-K-1.txt
B-chapter--2.txt
C-CHAP-TER-3.txt
找出命名不规范的全角字符,主要是数字。不规范(同名文件名,含空格 ,两个小横号--,符号'   全角字符【数字字母】,带副本)
发表于 2017-2-25 22:58:35 | 显示全部楼层
回复 10# kaze


C:\>type 1.log
ABOOK-1.txt
ABOOK-1.txt
ABOOK-1 - 副本.txt
A-BO-O-K-1.txt
B-chapter--2.txt
C-CHAP-TER-3.txt

C:\>findstr /i "0 1 2 3 4 5 6 7 8 9" 1.log
ABOOK-1.txt
C-CHAP-TER-3.txt

全角数字没问题
 楼主| 发表于 2017-2-26 14:57:28 | 显示全部楼层
回复 11# GNU


    你好,那怎么解决最后导出的文件名如何再加上路径呢?
发表于 2017-2-26 15:56:49 | 显示全部楼层
回复 12# kaze
  1. @echo off
  2. for /f "tokens=*" %%i in ('dir /a-d /b /s *.txt') do (
  3.     echo %%~nxi | findstr /i "副本" >nul 2>&1 && echo %%i
  4. )
  5. pause
复制代码
 楼主| 发表于 2017-2-26 23:18:35 | 显示全部楼层
本帖最后由 kaze 于 2017-2-27 10:48 编辑

回复 13# GNU
那就可以修改成这样了:    findstr /i "副本 0 1 2 3 4 5 6 7 8 9"

    请问符号之类的只能重复一下代码吗?
文件变多的话,代码会卡死( ⊙ o ⊙ )啊!
 楼主| 发表于 2017-3-8 10:20:06 | 显示全部楼层
回复 13# GNU

请问文件多,代码反应慢怎么解决呢?
    findstr /i "副本 0 1 2 3 4 5 6 7 8 9"
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 16:49 , Processed in 0.021483 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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