中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助](难题)[讨论](现解决)查找多个文件.bat
作者:
标题: [求助](难题)[讨论](现解决)查找多个文件.bat 上一主题 | 下一主题
dosz
中级用户

一看二跟三动手


积分 396
发帖 188
注册 2005-10-23
来自 上海
状态 离线
『楼 主』:  [求助](难题)[讨论](现解决)查找多个文件.bat

深度论坛 liuss 给我回复个帖子查找多个文件,可文件多处出错,
希望在此得到高手相助。
http://os.deepin.org/read.php?tid=1052540&page=1&toread=1

  Quote:

  1. @echo off&setlocal enabledelayedexpansion
  2. title 文件查找程序
  3. color 70
  4. echo 说明:
  5. echo 查找多个文件可以使用通配符,如输入:*.mp3 可查找所有的 MP3 文件,
  6. echo 或输入:*.mp3 *.wma *.wav 可查找所有的 mp3、wma、wav 文件等。
  7. echo 在要求输入分区名称时,输入:C D(或 C: D:)表示只搜索C盘和D盘。
  8. echo.
  9. set/p filename=请输入要查找的文件名:
  10. if "%filename%"=="" exit
  11. echo.
  12. set/p dri=请输入你要搜索的分区名称(直接回车表示全盘搜索):
  13. if "%dri%"=="" set dri=C D E F G H I J K L M N O P Q R S T U V W X Y Z
  14. set dri=%dri::=%

  15. echo %date% %time% >list.txt
  16. echo ----------------------------- >>list.txt
  17. for %%a in (%dri%) do (
  18.   if exist %%a:\nul (
  19.     cd/d %%a:\
  20.     cls&echo 正在搜索 %%a: 盘下的 !filename! ...
  21.     dir /b/s/a- !filename! >>%~dp0\list.txt
  22.   )
  23. )2>nul
  24. cd/d %~dp0
  25. for /f "delims=" %%a in (list.txt) do set/a n+=1
  26. set/a n=%n%-2
  27. echo ============================= >>list.txt
  28. echo 文件总数为:%n% >>list.txt
  29. cls
  30. echo 搜索完成,文件总数为:%n%
  31. ping 127.1 -n ^5>nul

  32. start list.txt
        无奈何发表于:  2009-04-12  21:23

[ Last edited by dosz on 2009-4-18 at 09:19 ]



*/. . . * .
.\* . [] * dosz
*/ . ./\~~~~~~~~~~~~'\. ^|◆
\* ,/,..,\,...........,\.◆
^|^| ..▎# ▎田 田 ▎ ^| ▎◆
^|^| ^&^&▎ ▎ ▎'^|'▎ o      
^|^| ##■■■■■■■■■■〓
2009-4-12 10:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 2 楼』:  

dir命令支持以下操作:

dir [路径] [多个文件列表]
如:
for /f "delims=" %%a in ('dir /s/b d:\*.bat *.txt *.mp3') do echo %%a


你自己试试看。



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-12 11:36
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 3 楼』:  

@echo off
::wangweiqq251485609
@echo   按清单查找程序或文件路径,请分行填入>t.txt
call  t.txt
cd.>lj.txt
for %%f in (C D E F G H I J K) do (
for /f %%i in (t.txt) do (
dir /a /b /s %%f:\%%i>>lj.txt
)
)

2009-4-13 01:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wuwei1dai
初级用户





积分 44
发帖 22
注册 2008-12-10
来自 广安
状态 离线
『第 4 楼』:  

给list.txt加上路径就没问题了

@echo off&setlocal enabledelayedexpansion

title 文件查找程序

color 70

echo 说明:

echo 查找多个文件可以使用通配符,如输入:*.mp3 可查找所有的 MP3 文件,

echo 或输入:*.mp3 *.wma *.wav 可查找所有的 mp3、wma、wav 文件等。

echo 在要求输入分区名称时,输入:C D(或 C: D:)表示只搜索C盘和D盘。

echo.

set/p filename=请输入要查找的文件名:

if "%filename%"=="" exit

echo.

set/p dri=请输入你要搜索的分区名称(直接回车表示全盘搜索):

if "%dri%"=="" set dri=C D E F G H I J K L M N O P Q R S T U V W X Y Z





echo %date% %time% >c:\list.txt

echo ----------------------------- >>c:\list.txt

for %%a in (%dri%) do (

  if exist %%a:\nul (

    cd/d %%a:\

    cls&echo 正在搜索 %%a: 盘下的 !filename! ...
   
    dir /b/s/a !filename! >>c:\list.txt

  )

)2>nul

cd/d %~dp0

for /f "delims=" %%a in (c:\list.txt) do set/a n+=1

set/a n=%n%-2

echo ============================= >>c:\list.txt

echo 文件总数为:%n% >>c:\list.txt

cls

echo 搜索完成,文件总数为:%n%

ping 127.1 -n ^5>nul



start c:\list.txt

2009-4-13 01:56
查看资料  发送邮件  发短消息 网志  OICQ (459253744)  编辑帖子  回复  引用回复
dosz
中级用户

一看二跟三动手


积分 396
发帖 188
注册 2005-10-23
来自 上海
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by wuwei1dai at 2009-4-13 01:56:
给list.txt加上路径就没问题了
@echo off&setlocal enabledelayedexpansion
title 文件查找程序
color 70
echo 说明:
echo 查找多个文件可以使用通配符,如 ...

给list.txt加上路径就没问题了
的确如此,谢谢广安的wuwei1dai朋友。
这个正合我意,我本来就要把它建在%temp%文件夹下。

echo.
echo ====== 为你找到: "%filename%" 文件总数为:%n% ,
echo.
echo 并保存到“%temp%\%sheet%.txt”文件中 ======


深度论坛的liuss说:他的代码经过多次测试成功。
dir /b/s/a- !filename! >>%~dp0\list.txt 此句是把结果定向到批处理本身所在目录下的文本中,因为上两行使用了 cd/d %%a:\ 改变了当前目录。

按理说没问题啊,你给我解释一下吧。

  Quote:

  1. @echo off&setlocal enabledelayedexpansion
  2. title 文件查找程序
  3. color 70
  4. echo 说明:
  5. echo 查找多个文件可以使用通配符,如输入:*.mp3 可查找所有的 MP3 文件,
  6. echo 或输入:*.mp3 *.wma *.wav 可查找所有的 mp3、wma、wav 文件等。
  7. echo 在要求输入分区名称时,输入:C D(或 C: D:)表示只搜索C盘和D盘。
  8. echo.
  9. set/p filename=请输入要查找的文件名:
  10. if "%filename%"=="" exit
  11. echo.
  12. set/p dri=请输入你要搜索的分区名称(直接回车表示全盘搜索):
  13. if "%dri%"=="" set dri=C D E F G H I J K L M N O P Q R S T U V W X Y Z
  14. echo.
  15. set/p sheet=请输入要写入例表的文件名:┗┛可选项(不要扩占名):
  16. echo %date% %time% >%temp%\%sheet%.txt
  17. echo ----------------------------- >>%temp%\%sheet%.txt
  18. for %%a in (%dri%) do (
  19.   if exist %%a:\nul (
  20.     cd/d %%a:\
  21.     cls&echo 正在搜索 %%a: 盘下的 !filename! ...   
  22.     dir /b/s/a !filename! >>%temp%\%sheet%.txt
  23.   )
  24. )2>nul
  25. cd/d %~dp0
  26. for /f "delims=" %%a in (%temp%\%sheet%.txt) do set/a n+=1
  27. set/a n=%n%-2
  28. echo ============================= >>%temp%\%sheet%.txt
  29. echo 文件总数为:%n% >>%temp%\%sheet%.txt
  30. cls
  31. echo.
  32. echo ====== 为你找到: "%filename%" 文件总数为:%n%
  33. echo.
  34. echo 并保存到“%temp%\%sheet%.txt”文件中 ======
  35. ping 127.1 -n ^8>nul
  36. start %temp%\%sheet%.txt
        无奈何发表于:  2009-04-17  22:12





*/. . . * .
.\* . [] * dosz
*/ . ./\~~~~~~~~~~~~'\. ^|◆
\* ,/,..,\,...........,\.◆
^|^| ..▎# ▎田 田 ▎ ^| ▎◆
^|^| ^&^&▎ ▎ ▎'^|'▎ o      
^|^| ##■■■■■■■■■■〓
2009-4-17 11:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 6 楼』:  

哦,原来这样,偶会错意了。I am sorry!



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-17 12:22
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
dosz
中级用户

一看二跟三动手


积分 396
发帖 188
注册 2005-10-23
来自 上海
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by dosz at 2009-4-17 11:22:
深度论坛的liuss说:他的代码经过多次测试成功。
dir /b/s/a- !filename! >>%~dp0\list.txt
此句是把结果定向到批处理本身所在目录下的文本中,因为上两行使用了 cd/d %%a:\ 改变了当前目录。
按理说没问题啊,你给我解释一下吧。

            如果批处理所在路径名称存在空格,应补上双引号: dir /b/s/a !filename! >>"%temp%\%filelist%.txt"

  Quote:

  1. @echo off&setlocal enabledelayedexpansion
  2. title 文件查找程序
  3. color 70
  4. echo 说明:
  5. echo 查找多个文件可以使用通配符,如输入:*.mp3 可查找所有的 MP3 文件,
  6. echo 或输入:*.mp3 *.wma *.wav 可查找所有的 mp3、wma、wav 文件等。
  7. echo 在要求输入分区名称时,输入:C D(或 C: D:)表示只搜索C盘和D盘。
  8. echo.
  9. set/p filename=请输入要查找的文件名:
  10. if "%filename%"=="" exit
  11. echo.
  12. set/p drv=请输入你要搜索的分区名称(直接回车表示全盘搜索):
  13. if "%drv%"=="" set drv=C D E F G H I J K L M N O P Q R S T U V W X Y Z
  14. echo.
  15. set/p filelist=请输入要写入清单的文件名:┗┛可选项(不要扩占名):
  16. if "%filelist%"=="" set filelist=list
  17. echo %date% %time% >%temp%\%filelist%.txt
  18. echo ----------------------------- >>%temp%\%filelist%.txt
  19. for %%a in (%drv%) do (
  20.   if exist %%a:\nul (
  21.     cd/d %%a:\
  22.     cls&echo 正在搜索 %%a: 盘下的 !filename! ...   
  23.     dir /b/s/a !filename! >>"%temp%\%filelist%.txt"
  24.   )
  25. )2>nul
  26. cd/d %~dp0
  27. for /f "delims=" %%a in (%temp%\%filelist%.txt) do set/a n+=1
  28. set/a n=%n%-2
  29. echo ============================= >>%temp%\%filelist%.txt
  30. echo 文件总数为:%n% >>%temp%\%filelist%.txt
  31. cls
  32. echo.
  33. echo ====== 为你找到: "%filename%" 文件总数为:%n%
  34. echo.
  35. echo 并保存到“%temp%\%filelist%.txt”文件中 ======
  36. ping 127.1 -n ^5>nul
  37. start %temp%\%filelist%.txt
  38. GOTO :EOF
        dosz发表于:  2009-04-18  10:33





*/. . . * .
.\* . [] * dosz
*/ . ./\~~~~~~~~~~~~'\. ^|◆
\* ,/,..,\,...........,\.◆
^|^| ..▎# ▎田 田 ▎ ^| ▎◆
^|^| ^&^&▎ ▎ ▎'^|'▎ o      
^|^| ##■■■■■■■■■■〓
2009-4-17 23:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wuwei1dai
初级用户





积分 44
发帖 22
注册 2008-12-10
来自 广安
状态 离线
『第 8 楼』:  

Originally posted by dosz at 2009-4-17 11:22:
深度论坛的liuss说:他的代码经过多次测试成功。

还是有缺陷  就是你说的路径中有空格就不行了

把dir /b/s/a- !filename! >>%~dp0\list.txt该成这样就可以了
dir /b/s/a- !filename! >>"%~dp0\list.txt"

2009-4-18 01:25
查看资料  发送邮件  发短消息 网志  OICQ (459253744)  编辑帖子  回复  引用回复
dosz
中级用户

一看二跟三动手


积分 396
发帖 188
注册 2005-10-23
来自 上海
状态 离线
『第 9 楼』:  

re: wuwei1dai
是的,事实上,你的做法和他的做法不某而合。
liuss:如果批处理所在路径名称存在空格,应补上双引号: "%~dp0\list.txt"  
wuwei1dai:给list.txt加上路径就没问题了
一般地我多在桌面上测试 bat,而桌面路径则带空格
C:\Documents and Settings\Administrator\桌面

在此谢谢各位网友!



*/. . . * .
.\* . [] * dosz
*/ . ./\~~~~~~~~~~~~'\. ^|◆
\* ,/,..,\,...........,\.◆
^|^| ..▎# ▎田 田 ▎ ^| ▎◆
^|^| ^&^&▎ ▎ ▎'^|'▎ o      
^|^| ##■■■■■■■■■■〓
2009-4-18 09:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: