中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 超强[文件/文字]搜索 上一主题 | 下一主题
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『楼 主』:  超强[文件/文字]搜索

可搜索指定路径下的文件(包括系统文件和隐藏文件),可搜索指定路径下指定文件类型里的文字(比如找C盘里所有包含“我爱你”三字的HTM文件)。可批量或单个删除找到的文件,我不喜欢用系统自带的搜索功能,所以就写了这个,脚本里说明写得不好,但你会用一定觉得很有用的。
@echo off
mode con lines=17 cols=60
color 1f
title 文件索引       chenlian  --20081218
rem 本程序的特点是可以快速的查找你想找的文件、文件夹、和文字,并可快速打开搜索的结果。
rem 例如查找"i love you"的文件或文件夹,或者在指定文件类型里查找含有"i love you"文字的文件,并迅速打开。
rem 可以单个或全部删除搜索到的文件。
rem 2007-08-30 @XP CMD 20081218再次修改了一些小BUG,更稳定不易出错。

:0
cls
echo.
echo   本机所有磁盘列表:
echo -----------------------
echo 盘符  磁盘类型
echo.
setlocal enabledelayedexpansion
for /f "skip=1 tokens=1,2 delims=\" %%a in ('fsutil fsinfo drives^|find /v ""') do (
    set aa=%%a
    set aa=!aa:~-2!
    for %%i in (!aa!) do fsutil fsinfo drivetype %%i
)
endlocal
echo ------------------------
set cpan=%~dp0
set cpan=%cpan:~0,-1%
echo  [ 默认路径: %cpan%\ ]&echo.
set/p cpan= 在哪个路径下查找? :
if "%cpan:~3,1%"=="\" set cpan=%cpan:~1,-1%
if not exist %cpan:~0,1%: echo 路径不存在!  任意键返回...&pause>nul&goto 0
set ziliao=:
echo  (查找内容前加[\]忽略子目录,[/]在指定文件中找字符串.)
echo  (查找文档可用通配符[*]号或[?]号扩大搜索范围.       )
set/p ziliao= 想找什么? :
cls
echo.&echo.&echo  执行中!
echo  在路径[ %cpan% ]中搜索[ %ziliao% ].
echo.&echo  正在查找,请稍候 ...
set "ziliao=%ziliao:"=%"
if "%ziliao%"==":" goto 0
if exist 查找结果.txt del/f/q 查找结果.txt
if exist 查找结果.czjg del/f/q 查找结果.czjg
set dirrs=dir/a/s/b/d
set zimulu=查找
set ads=/s
if not "%cpan:~2,1%"=="\" set cpan=%cpan:~0,1%:
if "%ziliao:~0,1%"=="\" (if "%ziliao:~1,1%"=="/" (set ziliao=%ziliao:~2,100%&set zimulu=忽略&set ads=&goto 2) else (set ziliao=%ziliao:~1,100%&set dirrs=dir/a/b/d&set zimulu=忽略&goto cazao))
if "%ziliao:~1,1%"=="\" set dirrs=dir/a/b/d&set zimulu=忽略&set ads=
if "%ziliao:~0,1%"=="/" (if "%ziliao:~1,1%"=="\" (set ziliao=%ziliao:~2,100%&set ads=&goto 2) else (set ziliao=%ziliao:~1,100%&goto 2)) else (if "%ziliao:~0,1%"=="\" set ziliao=%ziliao:~1,100%)

:cazao
if "%leixin%"=="" (set neixin=全部) else (set neixin=.%leixin%)
>查找结果.txt echo 查找时间: [ %date:~0,10% %time:~0,5% ]
>>查找结果.txt echo.
>>查找结果.txt echo 查找目录: [ %cpan%\ ]
>>查找结果.txt echo.
>>查找结果.txt echo 子 目 录: [ %zimulu% ]
>>查找结果.txt echo.
>>查找结果.txt echo 文件类型: [ %neixin% ]
>>查找结果.txt echo.
>>查找结果.txt echo 查找内容: [ %ziliao% ]
>>查找结果.txt echo.
>>查找结果.txt echo 查找结果:        %dxx%
>>查找结果.txt echo ──────────────────────
%gotoend%

:1
%dirrs% "%cpan%\*%ziliao%*"|findstr /n .>>查找结果.txt
>>查找结果.txt echo ──────────end────────────
if %ERRORLEVEL%==1 cls&echo.&echo  搜索类型: [ 文件或文件夹 ]&echo.&echo  搜索目录: [ %cpan%\ ]&echo.&echo  子 目 录: [ %zimulu% ]&echo.&echo  结    果: 没有找到与"%ziliao%"有关的文件或文件夹!&echo.&echo  按任意键返回... &pause>nul&goto 0
start "%SystemRoot%\system32\notepad.exe" 查找结果.txt
cls
for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"──────────end────────────" 查找结果.txt') do (set /a hhao=%%i-13)
echo.&echo  查找路径: [ %cpan%\ ]
echo.&echo  查找内容: [ %ziliao% ]
echo.&echo  找到结果: [ %hhao%个 ]
echo.&echo  请在弹出的窗口在查看详细内容.
echo.&echo  如需打开相应文件,请输入查找结果前对应的数字并回车.
echo.&echo  数字前加[d]删除对应的文件;[0]删除所有搜索到的文件.
echo.&echo  数字前加[.]用记事本打开对应的文件.&echo.
:czwj
set/p dakai= ^>^>:
set sta=start ""
set paus=
if "%dakai%"=="0" cls&echo  下列文件删除失败:&set paus=pause&for /f "tokens=3 delims=:" %%i in ('findstr /b . 查找结果.txt') do (if exist "%cpan:~0,1%:%%i" del/q/f/a "%cpan:~0,1%:%%i" 2>nul)
%paus%
if "%dakai:~0,1%"=="." set dakai=%dakai:~1,5%&set sta=notepad.exe
if /i "%dakai%"=="d" goto 0
if /i "%dakai:~0,1%"=="d" set dakai=%dakai:~1,5%&set sta=del/q/f/a
set/a jisuan=10000-%dakai%
if "%jisuan%"=="10000" goto 0
for /f "tokens=3 delims=:" %%i in ('findstr /b "%dakai%:" 查找结果.txt') do (%sta% "%cpan:~0,1%:%%i")
goto czwj

:2
cls
echo.&echo  扩展名前加[.]关键词被视为整体;后加[/x]区分大小写.&echo.
echo  文件扩展名默认为TXT格式.&echo.
set adi=/i&set dxx=(搜索不分大小写)
set sdc=
set leixin=txt
set/p leixin= 请输入文件扩展名(如"htm",保持默认请直接回车) :  
echo.&echo  正在搜索字符串,请稍候 ...
if /i "%leixin%"=="/x" set leixin=:&set dxx=(搜索区分大小写)&set adi=
if /i "%leixin:~-2,2%"=="/x" set leixin=%leixin:~0,-2%&set dxx=(搜索区分大小写)&set adi=
if "%leixin:~0,1%"=="." (if "%leixin:~-1%"=="." (set leixin=txt&set sdc=/c:) else (set leixin=%leixin:~1,100%&set sdc=/c:)) else (set sdc=)
set gotoend=goto :eof
call :cazao
ren 查找结果.txt 查找结果.czjg
findstr %ads% %adi% %sdc%"%ziliao%" "%cpan%\*.%leixin%"|findstr /n .>>查找结果.czjg 2>nul
>>查找结果.czjg echo ──────────end────────────
if %ERRORLEVEL%==1 cls&echo.&echo  搜索类型: [ 文档字符串 ]&echo.&echo  搜索目录: [ %cpan%\ ]&echo.&echo  子 目 录: [ %zimulu% ]&echo.&echo  文件类型: [ .%leixin% ]&echo.&echo  结    果: 没有找到存在"%ziliao%"的文档! 请检查大小写再试试.&echo.&echo  按任意键返回... &pause>nul&goto 0
ren 查找结果.czjg 查找结果.txt
start "%SystemRoot%\system32\notepad.exe" 查找结果.txt
cls
for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"──────────end────────────" 查找结果.txt') do (set /a hhao=%%i-13)
echo.&echo  查找路径: [ %cpan%\ ]
echo.&echo  字符内容: [ %ziliao% ]
echo.&echo  找到结果: [ %hhao%条 ]
echo.&echo  请在弹出的窗口在查看详细内容.
echo.&echo  如需查看文件请输入查找结果前对应的数字并回车.
echo.&echo  数字前加[.]用记事本打开;[d]删除文件;[0]删除所有!&echo.
:dk
set/p dakai= ^>^>:
set sta=start ""
set paus=
if "%dakai%"=="0" cls&echo  下列文件删除失败:&set paus=pause&for /f "tokens=3 delims=:" %%i in ('findstr /b . 查找结果.txt') do (if exist "%cpan:~0,1%:%%i" del/q/f/a "%cpan:~0,1%:%%i" 2>nul)
%paus%
if "%dakai:~0,1%"=="." set dakai=%dakai:~1,5%&set sta=notepad.exe
if /i "%dakai%"=="d" goto 0
if /i "%dakai:~0,1%"=="d" set dakai=%dakai:~1,5%&set sta=del/q/f/a
set/a jisuan=10000-%dakai%
if "%jisuan%"=="10000" goto 0
for /f "tokens=3 delims=:" %%i in ('findstr /b "%dakai%:" 查找结果.txt') do %sta% "%cpan:~0,1%:%%i"
goto dk
[ Last edited by clian76 on 2008-12-18 at 14:11 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 NeverAgain 分数: +2  时间:2008-10-29 15:37


2008-10-27 22:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

写得不错,不过 查找结果.txt 里面显示的 “文件类型: [ . ]”这里有点小错误。

2008-10-28 13:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 3 楼』:  

呵呵,[ . ] 这个点就表示所有类型了:)

2008-10-28 13:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  RE: clian76

但是我用的是 *.pl ,它怎么会显示一个点呢?

2008-10-28 13:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 5 楼』:  

这个 *.pl  显示在“查找内容”里面,文件类型: [ . ] 这个用在查找文字时显示文件类型。另外刚才更新了一下,
for /f "skip=1 tokens=1,2 delims=\" %%a in ('fsutil fsinfo drives^|find /v ""') do (
    set aa=%%a
    set aa=!aa:~-2!
    for %%i in (!aa!) do fsutil fsinfo drivetype %%i
)
echo ------------------------
set cpan=%cd%
set/p cpan= 在哪个路径下查找? :
if "%cpan:~3,1%"=="\" set cpan=%cpan:~1,-1%

加了一句:set cpan=%cd%,默认在当前目录中查找。

2008-10-28 14:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NeverAgain
初级用户





积分 67
发帖 40
注册 2008-1-31
状态 离线
『第 6 楼』:  

楼主太厉害了

2008-10-29 15:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 7 楼』:  

20081218更新过了,修改了些小错误,更稳定了。

2008-12-18 01:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
clian76
中级用户





积分 363
发帖 162
注册 2007-4-22
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by lxmxn at 2008-10-28 01:00 PM:
写得不错,不过 查找结果.txt 里面显示的 “文件类型: [ . ]”这里有点小错误。

问题修正

2008-12-18 14:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kissbill
初级用户





积分 61
发帖 35
注册 2008-10-4
状态 离线
『第 9 楼』:  

这么多行,辛苦。

2008-12-18 18:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
376775167
新手上路





积分 4
发帖 4
注册 2007-7-4
状态 离线
『第 10 楼』:  cmd下果然强悍,可以运行与dos6.22或者98下的dos环境?

不知道是否可以运行与dos6.22或者98下的dos环境?

2008-12-18 21:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ktv98
初级用户





积分 112
发帖 81
注册 2008-4-11
状态 离线
『第 11 楼』:  

体力活楼主辛苦了.佩服



CN-DOS批处理室非官方QQ群①:61377162 ②:70174619 ③:75070617
请勿尝试同时加多个群
2008-12-19 00:34
查看资料  发送邮件  发短消息 网志  OICQ (408130581)  编辑帖子  回复  引用回复

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


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



论坛跳转: