|
dosz
中级用户
一看二跟三动手
积分 396
发帖 188
注册 2005-10-23 来自 上海
状态 离线
|
『楼 主』:
[求助](难题)[讨论](现解决)查找多个文件.bat
在 深度论坛 liuss 给我回复个帖子查找多个文件,可文件多处出错,
希望在此得到高手相助。
http://os.deepin.org/read.php?tid=1052540&page=1&toread=1
Quote: |
- @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
- set dri=%dri::=%
- echo %date% %time% >list.txt
- echo ----------------------------- >>list.txt
- for %%a in (%dri%) do (
- if exist %%a:\nul (
- cd/d %%a:\
- cls&echo 正在搜索 %%a: 盘下的 !filename! ...
- dir /b/s/a- !filename! >>%~dp0\list.txt
- )
- )2>nul
- cd/d %~dp0
- for /f "delims=" %%a in (list.txt) do set/a n+=1
- set/a n=%n%-2
- echo ============================= >>list.txt
- echo 文件总数为:%n% >>list.txt
- cls
- echo 搜索完成,文件总数为:%n%
- ping 127.1 -n ^5>nul
- 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 |
|
|
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 |
|
|
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: |
- @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.
- set/p sheet=请输入要写入例表的文件名:┗┛可选项(不要扩占名):
- echo %date% %time% >%temp%\%sheet%.txt
- echo ----------------------------- >>%temp%\%sheet%.txt
- for %%a in (%dri%) do (
- if exist %%a:\nul (
- cd/d %%a:\
- cls&echo 正在搜索 %%a: 盘下的 !filename! ...
- dir /b/s/a !filename! >>%temp%\%sheet%.txt
- )
- )2>nul
- cd/d %~dp0
- for /f "delims=" %%a in (%temp%\%sheet%.txt) do set/a n+=1
- set/a n=%n%-2
- echo ============================= >>%temp%\%sheet%.txt
- echo 文件总数为:%n% >>%temp%\%sheet%.txt
- cls
- echo.
- echo ====== 为你找到: "%filename%" 文件总数为:%n% ,
- echo.
- echo 并保存到“%temp%\%sheet%.txt”文件中 ======
- ping 127.1 -n ^8>nul
- 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 |
|
|
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: |
- @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 drv=请输入你要搜索的分区名称(直接回车表示全盘搜索):
- 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
- echo.
- set/p filelist=请输入要写入清单的文件名:┗┛可选项(不要扩占名):
- if "%filelist%"=="" set filelist=list
- echo %date% %time% >%temp%\%filelist%.txt
- echo ----------------------------- >>%temp%\%filelist%.txt
- for %%a in (%drv%) do (
- if exist %%a:\nul (
- cd/d %%a:\
- cls&echo 正在搜索 %%a: 盘下的 !filename! ...
- dir /b/s/a !filename! >>"%temp%\%filelist%.txt"
- )
- )2>nul
- cd/d %~dp0
- for /f "delims=" %%a in (%temp%\%filelist%.txt) do set/a n+=1
- set/a n=%n%-2
- echo ============================= >>%temp%\%filelist%.txt
- echo 文件总数为:%n% >>%temp%\%filelist%.txt
- cls
- echo.
- echo ====== 为你找到: "%filename%" 文件总数为:%n% ,
- echo.
- echo 并保存到“%temp%\%filelist%.txt”文件中 ======
- ping 127.1 -n ^5>nul
- start %temp%\%filelist%.txt
- 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 |
|
|
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 |
|