windows批量检测文件(夹)是否存在的批处理程序

    任务举例

    在使用了 批量搜索并复制/剪切文件的批处理程序 中的批处理程序之后,往往还需要和原有的关键字比对,知道搜索到了多少文件。这就需要一个工具,能够批量检测一批关键字是否存在于一堆文件里。比如有如下一些文件:

    AA1

    BB2

    DD3

    BBC1

    EE2

    Abb

    希望从中批量搜索文件名包含

    AA

    BB

    CC

    的文件

    希望得到的结果有:AA1,BB2,BBC1,Abb

    有点类似Excel里的vlookup命令,所不同的是用批处理程序可以直接在文件目录下操作,而不需要导出文件名的列表。

    实现方法

    批量搜索类似,实现这个任务,仍然需要强大的for命令,并且结合find命令,就能完成这一任务。同时也能检测文件夹是否存在。最后将找到和未找到的关键词分别输出到两个文本文件下。

    首先把关键字保存在名叫“list.txt”的文本文件里,每个关键字占一行。注意不能有空格、空行、空回车。例如:

    #list.txt 文件内容

    AA

    BB

    CC

    然后把下面的代码保存成以*.bat为扩展名的批处理文件:

    
    ::Batch search & check
    ::by lfhacks.com, Apr 1,2009
    
    @echo off
    setlocal enabledelayedexpansion
    color 1E
    echo 本程序检查当前目录下是否存在给定关键字的文件(夹)
    echo.
    echo by www.lfhacks.com
    echo.
    echo 例如,检查缺少的文件名
    if not exist list.txt (echo.
    echo 请先将关键字列表保存为list.txt...
    pause > NUL
    exit
    )
    echo.
    echo 要检查文件还是目录?
    echo.
    set /p opt=文件(f) or 目录(d):
    if %opt% NEQ f if %opt% NEQ d (
    echo 回应错误。
    pause >NUL
    exit
    )
    if %opt%==d (
    dir /AD /B * >tempp
    )
    if %opt%==f (
    set /p ext=指定文件扩展名(不包括".",不指定请输入*):
    dir /A-D /B *.!ext! >tempp
    )
    
    if exist result.txt del result.txt 
    set count=0
    for /f "tokens=*" %%i in (list.txt) do (
    find "%%i" tempp >NUL
    echo 检查 %%i... 
    if !errorlevel! EQU 1 (
    echo --- Not Found ---
    echo %%i >> Not_found.txt
    set /a count+=1
    )ELSE (
    echo %%i >> Found.txt
    )
    )
    del tempp
    echo.
    if %count% NEQ 0 echo 任务完成!共有 %count% 个关键字不存在,结果已保存到Not_found.txt
    if %count% EQU 0 echo 列表中的关键字都存在
    echo 存在的关键字保存到Found.txt
    
    pause >NUL
    exit

    更多关于Windows效率批处理程序请查看下面的相关链接