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

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

[复制链接]
 楼主| 发表于 2011-10-3 22:47:48 | 显示全部楼层
本帖最后由 super1129 于 2011-10-3 22:50 编辑
回复  super1129

dir/b/s/a-d "e:\abc\*.*">2.txt
运行上面的,把1.txt 和 2.txt 发附件上来。
FOR 发表于 2011-10-3 22:36


e:\abc  下文件为 123.txt   789.pdf

1.txt  是
123.txt
789.pdf
456.txt


2.txt是
e:\abc\123.txt
e:\abc\789.pdf
发表于 2011-10-3 23:26:17 | 显示全部楼层
我那个 findstr 确实不行,得另想办法。
发表于 2011-10-4 01:40:16 | 显示全部楼层
本帖最后由 BAT1 于 2011-10-4 02:50 编辑

我在X:\ 下面写出来的的,用的时候,请根据自己的实际情况修改一下吧.
  1. @echo off
  2. if not exist "1.txt" echo 1.txt 在哪里?&pause >nul & exit
  3. if not exist "x:\123" md x:\123
  4. if exist 2.txt del 2.txt
  5. for /f "delims=" %%j in (1.txt) do (
  6.    if exist "x:\abc\%%j"  echo  在x:\abc发现%%j & copy "x:\abc\%%j" "x:\123\%%j"
  7.    for /f "delims=" %%i in ('dir /a:d /b /s x:\abc') do (
  8.       if exist "%%i\%%j"  echo  在%%i发现%%j & copy "%%i\%%j" "x:\123\%%j"
  9. ))>nul
  10. echo 已经拷贝指定文件!!!
  11. for /f %%i in (1.txt) do (
  12.    echo %%i
  13.    if not exist "x:\123\%%i"  echo %%i >>2.txt
  14. )>nul
  15. if exist "x:\2.txt" echo 但找不到下例文件:& type 2.txt
  16. pause
复制代码

评分

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

查看全部评分

发表于 2011-10-4 06:46:44 | 显示全部楼层
只想到这种嵌套循环对比判断的方法,文件太大则效率不高

  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%i in (1.txt) do (
  3.         set "num="
  4.         for /f "delims=" %%j in (tem.txt) do (
  5.                 set "var=%%j"
  6.                 set "str=!var:%%i=!"
  7.                 if not "!var!"=="!str!" set num=n
  8.         )
  9.         if not defined num echo %%i
  10. ))>error.txt
  11. start error.txt




复制代码

评分

参与人数 1技术 +1 收起 理由
super1129 + 1 非常感谢

查看全部评分

 楼主| 发表于 2011-10-4 08:46:15 | 显示全部楼层
回复 18# BAT1


    谢谢,这个程序用于查找完全匹配的没有问题。也非常好。

但是我希望能实现模糊匹配,就是说 文件名为123456[a].pdf、789[a].doc 之类的,我在1.txt中输入[a] 也要匹配到这两个文件。


不知道有没有办法实现呢?
 楼主| 发表于 2011-10-4 09:06:48 | 显示全部楼层
回复 19# FOR


没问题了,辛苦了,非常感谢
发表于 2011-10-4 23:48:31 | 显示全部楼层
本帖最后由 guaiwu 于 2011-10-4 23:52 编辑

回复 8# guaiwu

听取CrLf 的意见,加了班   到了12点终于研究出来粗成果。
参考下现在的效果
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in (1.txt) do (
  4. for /f "delims=" %%i in ('dir /s /b e:\abc') do (
  5. echo %%~nxi | findstr %%a &&echo f | xcopy "%%~fi" "e:\123\%%~nxi" /s
  6. ))
  7. set str1=dir /b E:\123
  8. set str2=dir /b E:\abc
  9. for %%a in ("%str1%" "%str2%") do (
  10. set /a b+=1
  11. for /f "delims=" %%i in ('%%a') do (
  12. set /a a+=1
  13. set _!a!=%%~nxi
  14. )
  15. set .!b!=!a!
  16. )
  17. set /a c=!.1!+1
  18. for /l %%i in (1,1,%.1%) do (
  19. for /l %%j in (!c!,1,%.2%) do (
  20. if !_%%i! equ !_%%j! (
  21. set _%%i= -
  22. )))
  23. for /l %%i in (1,1,%a%) do echo !_%%i!>>error.txt
  24. pause
复制代码
见到FOR做出的,没办法人家的水平只能到这。 别见笑

评分

参与人数 1技术 +1 收起 理由
super1129 + 1 辛苦了

查看全部评分

发表于 2011-10-5 10:09:33 | 显示全部楼层
回复 22# guaiwu


CrLf有木有建议过你写代码的时候要使用缩进啊?
发表于 2011-10-5 14:40:25 | 显示全部楼层
回复 23# Batcher


CrLf有木有建议过你写代码的时候要使用缩进啊?

CrLf  并没有给我什么提示  我只是给自己写的代码升级了一下效率


不关效果什么样。  我不抄袭做出来的请别这么贬低别人好么。  
怎么说这是人家的花了时间心血写出来的。并不是随随便便。
发表于 2011-10-5 15:18:06 | 显示全部楼层
回复 24# guaiwu


建议你用缩进就是贬低你?
发表于 2011-10-5 15:20:54 | 显示全部楼层
回复 24# guaiwu


batcher 版主的意思是建议你写代码时缩进
否则读你的代码很累
缩进方法,通常是每对括弧内的语句前面都加几个空格或制表符
  1. for /l %%i in (1 1 2) do (
  2.         命令
  3.         命令
  4.         for /l %%j in (1 1 2) do (
  5.                 命令
  6.                 命令
  7.                 for /l %%j in (1 1 2) do (
  8.                         命令
  9.                         命令
  10.                 )
  11.         )
  12. )
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 06:00 , Processed in 0.021732 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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