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

[文本处理] [已解决]怎样在指定目录及子目录下查找含特定字符的文件?

[复制链接]
发表于 2011-10-3 13:11:00 | 显示全部楼层 |阅读模式
本帖最后由 super1129 于 2011-10-8 09:38 编辑

请问大家要想在e:\abc及其子目录下,查找含有1.txt中的字符串的文件。
1.txt比如包含
abc
123
123.pdf
……
(可能有后缀名)
如果在e:\abc及其子目录下的文件名中找到含有上述字符串的文件(包含即可),并拷贝到D:\123 下,找不到就将1.txt中字符输出到D:\123\error.txt

应该是要用findstr

谢谢


忠心感谢 耐心的guaiwu 、FOR 及 BAT1   

评分

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

查看全部评分

发表于 2011-10-3 13:39:11 | 显示全部楼层
感觉你的需求写得有点乱, 不太理解. 希望补充文件名实例.
再问几个问题.
1. 在你提供的例子中, 有一个文件名比较. 是必须比较这个名吗? 还是2所描述的需求? 这个关系到后面的问题该如何处理.
2. 是所有的TXT中, 尾数包含 1 的TXT文件吗?
3. 找到则拷贝, 这里面子目录是否会出现同样的文件名? 有无的处理方式要求如何?
4. 否则的输出, 是要求输出什么? 输出这个目录里不存在包含 1 结尾的TXT文件?
 楼主| 发表于 2011-10-3 13:43:21 | 显示全部楼层
感觉你的需求写得有点乱, 不太理解. 希望补充文件名实例.
再问几个问题.
1. 在你提供的例子中, 有一个文件 ...
hkmhd 发表于 2011-10-3 13:39



1.txt是用来存储我要搜索的字符串的。
一行一个字符串。
发表于 2011-10-3 14:54:25 | 显示全部楼层
遇到一个问题, for 找不到的文件, 不知道为何 if 的时候不会出错. 求大师解答吧.
  1. @echo
  2. del 1.txt,error.txt 2>nul
  3. for %%i in ("abc.txt","123.txt","ddd.txt","123.pdf") do (
  4. echo %%i>>1.txt
  5. echo.>11\%%i
  6. )
  7. for /f %%a in (1.txt) do (
  8.         for /r %%a in (*%%a*) do (
  9.         if exist "%%a" (xcopy /s /e /y "%%a") else (echo "%%a">>error.txt)
  10.         )
  11. )
  12. pause
复制代码

评分

参与人数 1PB +5 收起 理由
CrLf + 5 乐于助人

查看全部评分

 楼主| 发表于 2011-10-3 15:22:36 | 显示全部楼层
回复 4# hkmhd


    我的主要问题是不能复制e:abc及其子目录下的符合要求的文件。
你的程序中没有体现这个呀
发表于 2011-10-3 15:40:43 | 显示全部楼层
本帖最后由 guaiwu 于 2011-10-3 15:42 编辑
if exist e:\abc\*%%a* (echo d|xcopy e:\abc\*%%a* D:\123 /s /e /y ) else echo %%a>>D:\123\error.txt
没发现这段有问题吗?
xcopy e:\abc\*%%a* D:\123 /s /e /y  
第一次:由于没发现定文件夹或文件,输入D选项确定是一个文件夹
第二次:输入D为无效。并出现创建新文件出错。
 楼主| 发表于 2011-10-3 15:42:29 | 显示全部楼层
没发现这段有问题吗?
xcopy e:\abc\*%%a* D:\123 /s /e /y  
第一次:由于没发现定文件夹或文件,输入D选 ...
guaiwu 发表于 2011-10-3 15:40



    谢谢,那请问该如何写bat程序呢?
发表于 2011-10-3 16:56:05 | 显示全部楼层
本帖最后由 guaiwu 于 2011-10-3 17:33 编辑
  1. @echo off
  2. for /f "delims=" %%a in (1.txt) do (
  3. for /f "delims=" %%i in ('dir /s /b e:\abc') do (
  4. echo %%~nxi | findstr %%a &&echo f | xcopy "%%~fi" "e:\123\%%~nxi" /s || echo %%~fi >>error.txt
  5. ))
  6. pause
复制代码
警告哦 这个批处理只能运行一次   运行多次是重名的
注意1.txt的文件名不能有冲突哦

评分

参与人数 1PB +5 收起 理由
CrLf + 5 乐于助人,不过还可以提升一下效率

查看全部评分

 楼主| 发表于 2011-10-3 17:27:41 | 显示全部楼层
回复 8# guaiwu


    谢谢,就是后面那句 如果1.txt中的字符串没有匹配到文件,则输出到error.txt 没有体现。
上面的代码得到的error.txt 中 把e:\abc及其子目录下所有的文件及文件夹都列出来了,不是我要的目的。

我的目的是,1.txt 中字符串如果匹配到文件就复制,匹配不到的就输出至error.txt
发表于 2011-10-3 17:51:30 | 显示全部楼层
  1. @echo off
  2. dir /b/s/a-d "e:\abc\*.*">tem.txt
  3. findstr /ivg:tem.txt 1.txt>d:\123\error.txt
  4. for /f "delims=" %%i in ('findstr /ig:1.txt tem.txt') do copy /y "%%i" "d:\123"
  5. del tem.txt
  6. pause
复制代码
发表于 2011-10-3 20:07:52 | 显示全部楼层
本帖最后由 hkmhd 于 2011-10-3 20:13 编辑
回复  hkmhd


    我的主要问题是不能复制e:abc及其子目录下的符合要求的文件。
你的程序中没有体现这 ...
super1129 发表于 2011-10-3 15:22



    为了测试, 所以没有明确遍历文件的路径. 不过后面有更好的思路, 所以无视吧.
发表于 2011-10-3 20:15:31 | 显示全部楼层
回复 10# FOR
findstr /ivg:tem.txt 1.txt>d:\123\error.txt

请问 这句话起什么作用。  有两段findstr命令在findstr /?中找不到帮助?
发表于 2011-10-3 20:45:17 | 显示全部楼层
回复 12# guaiwu

1.txt 中有 tem.txt 中没有的
 楼主| 发表于 2011-10-3 21:53:59 | 显示全部楼层
本帖最后由 super1129 于 2011-10-3 22:14 编辑

回复 10# FOR


    谢谢,好像error.txt  并不是所需要的没有匹配到的。
是不是因为 tem.txt 是包含路径的原因,所以导致这个不对呢? /ivg:tem.txt 1.txt

麻烦再看看,谢谢
发表于 2011-10-3 22:36:43 | 显示全部楼层
回复 14# super1129

dir/b/s/a-d "e:\abc\*.*">2.txt
运行上面的,把1.txt 和 2.txt 发附件上来。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 06:01 , Processed in 0.023474 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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