本帖最后由 tmplinshi 于 2012-11-20 15:55 编辑
- @echo off
- setlocal
-
- :: ====================
- :: 设置
- :: ====================
- ::
- set List_File="file_list.txt"
- set Search_Dir="E:\Program Files\Tools\"
- set MoveTo_Dir="Found"
- set Log_File="NotFound.txt"
-
- :: ====================
- :: 生成查找文件的批处理
- :: ====================
- ::
- (
- set /p = @dir /s /b
- for /f "eol=< usebackq delims=" %%a in (%List_File%) do set /p = "%%a"
- ) <nul >"%temp%\_dir.bat"
-
- :: ====================
- :: 搜索文件;移动文件;记录已找到的文件
- :: ====================
- ::
- if not exist %MoveTo_Dir% md %MoveTo_Dir%
- for %%a in (%MoveTo_Dir%) do set MoveTo_Dir="%%~fa"
- pushd %Search_Dir%
-
- (
- echo 正在搜索... >con
- for /f "eol=< delims=" %%a in (' "%temp%\_dir.bat" ') do (
- echo %%~nxa
- echo 正在移动 "%%a"... >con
- move "%%a" %MoveTo_Dir%
- )
- ) >"%temp%\.found.tmp"
-
- :: ====================
- :: 将未找到的文件记录到 %Log_File% 中
- :: ====================
- ::
- popd
- type "%temp%\.found.tmp" %List_File% 2>nul | sort >"%temp%\.sort.tmp"
-
- (
- set count=0
- for /f "eol=< usebackq delims=" %%a in ("%temp%\.sort.tmp") do (
- set str=%%a
- setlocal enabledelayedexpansion
- if /i "!str!" neq "!last!" (
- if !count! == 1 echo,!last!
- EndLocal
- set last=%%a
- set count=1
- ) else (
- EndLocal
- set /a count += 1
- )
- )
- ) >%Log_File%
-
- setlocal enabledelayedexpansion
- if %count% == 1 echo !last!>>!Log_File!
- EndLocal
-
- for %%a in (%Log_File%) do (
- if %%~za neq 0 (
- echo,
- echo 未找到的文件已记录到 %Log_File% 中,内容如下:
- type %Log_File%
- )
- )
-
- :: ====================
- :: 退出
- :: ====================
- ::
- del "%temp%\_dir.bat" "%temp%\.found.tmp" "%temp%\.sort.tmp"
- echo,
- echo 完成!按任意键退出...
- pause >nul
复制代码
|