[原创]给自己的光盘建立小型检索目录

[原创]给自己的光盘建立小型检索目录

这篇文章提供一种方法,利用Windows NT命令脚本建立一个检索目录。

效果:光盘中的文件、文件夹的名字和位置关系存放在文本文件中,每张光盘存放在同卷标或者其它名字的文件中。

设计构思:分两部分,一个是存储文件列表,一个是检索并输出查找结果。列表可以用tree命令直接获得,用set命令指定文件名,再加入容错环节即可。检索利用for命令可以查找所有光盘,查找用find,并且加入一个条件判断,如果找不到就不要把文本文件的名字写在查找结果里。

以下为我写的命令:

第一个:生成文件列表generatelist.cmd

***

@echo off
setlocal
dir Z: | find "卷是" || pause&&goto :end

:enterfilename
set /p volname=输入文件名

:ensure
set /p sure=新的文件名将是:%volname%.txt 确认?^(Y^/N^)
if /i "%sure%"=="n" goto :enterfilename else (
if /i not "%sure%"=="y" goto :ensure
)

if exist "%volname%".txt echo file already exist! please check again…&&pause&&goto :end
tree /a /f Z: >"%volname%".txt
cls
echo.
echo 关闭记事本后自动退出…
start /w %SYSTEMROOT%system32notepad.exe "%volname%".txt
:end
endlocal

***

说明:1. dir命令是用来显示光盘卷标的,同时检查是否有光盘放入。驱动器盘符,这里是Z:,如果有光盘,dir会显示一行“卷是……”,利用find输出这一行。如果没有,会显示“设备未就绪”,然后退出。
      2. 如果同名文件已存在,则提示出错并退出。
      3. 文件列表生成之后会用记事本打开相应的文件,关闭记事本后自动退出命令行解释器。

第二个:检索程序finddisc.cmd

***

@echo off
setlocal EnableDelayedExpansion

if exist findstr.tmp del findstr.tmp
:setfindstr
set /p findstr=Enter string to find   
if "%findstr%"=="" goto :setfindstr

for /r %%f in (*.txt) do find /i "%findstr%" "%%f">nul&&find /i "%findstr%" "%%f">>findstr.tmp

if not exist findstr.tmp (
echo no result
pause
) else (
start /w notepad.exe findstr.tmp
del findstr.tmp
)
endlocal

***

说明:1. 在中文Windows XP环境下可以查找任意中英文(最长8192字节且无CR/LF换行符)
      2. 在每一次for循环中,调用两次find命令,第一次检查某一个文本文件中是否含有欲查找的字符串,第二次根据第一次的结果,如果有就把结果保存在findstr.tmp文件中,如果没有就直接进行下一次循环。
      3. 全部文件查找结束之后,自动打开记事本,查看查找结果,如果没有结果,显示no result后退出。
      4. findstr.tmp可以理解为临时文件,退出时自动删除。
      5. for的参数/r令可以处理所有子文件夹中的文件,这意味着可以把不同的文件按类别存放在不同的文件夹中。

优点:
使用Windows NT命令脚本,占用系统资源极少,运行稳定。

已知缺点:
查找速度较慢(需要进行两次find查找);不能存储文件大小、修改日期等属性。

– END –

Advertisements
  1. 留下评论

Log in or fill out contact info to leave a reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: