:: 现在是一次只移动一个文件了.
:: 若有三个或三个以上的文件进行对比的话,移动的不一定是时间最近的.
:: 只能处理2000年至2099年的文件.
@echo off&set a=1&set b=1
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in ('dir/b *.txt') do call :ss "%%a"
rem +第三行内容=文件名
for /f "tokens=1-4 delims=_=" %%a in ('set _') do set +%%d=!+%%d!_%%a
rem __序号=文件名 第一行内容 第二行内容
for /f "tokens=2* delims=_" %%a in ('set +') do (
if not "%%b"=="" set __!a!=%%a_%%b&set/a a+=1
)
set __>nul 2>nul||echo.&&echo 没有需要移走的文件&&echo.&&pause&&exit
:loop
for /f "tokens=1* delims==_" %%a in ('set __!b!') do set qua=%%b
for /f "tokens=1,2 delims=_" %%i in ("!qua!") do set qua1="%%i"&set qua2="%%j"
for /f "tokens=1-3 delims=" %%c in (!qua1!) do set wjm="%%c"&set dyh=%%d&set deh=%%e
for /f "tokens=1-3 delims=" %%c in (!qua2!) do set wj="%%c"&set dyhr=%%d&set dehs=%%e
call :duibi
set /a b+=1
if defined __!b! goto loop
rem 移动文件
if not exist c:\456 md c:\456
cls&echo\&echo 以下是被移走的文件......&echo\
for /f "tokens=2 delims==" %%a in ('set ok^|sort') do (
echo %%a
move %%a c:\456
)
echo.&pause
start "" "c:\456"
exit
rem 将文件的前三行指定内容设为变量 格式: _文件名=第一行内容 第二行内容 第三行内容
:ss
set ls=0
rem 如果运行不成功,就将下面这行的delims=后面的空格删除,输入一个tab键即可.
for /f "tokens=2 delims= " %%b in ('findstr .* %1') do (
set/a ls+=1
if !ls! lss 4 (set "_%~1=!_%~1!_%%b") else goto :eof
)
goto :eof
rem 进行日期和时间的判断
:duibi
set/a ook+=1
if "!dyh!"=="!dyhr!" (
if !deh! leq !dehs! (set ok!ook!=!wj!) else (set ok!ook!=!wjm!)
goto :eof
)
for /f "tokens=1-3 delims=/" %%o in ("!dyh!") do set nian=20%%q&set yue=%%o&set ri=%%p
for /f "tokens=1-3 delims=/" %%o in ("!dyhr!") do (
set ni_an=20%%q&set y_ue=%%o&set r_i=%%p
)
if !nian!-!yue!-!ri! lss !ni_an!-!y_ue!-!r_i! (
set ok!ook!=!wj!&goto :eof
) else set ok!ook!=!wjm!
goto :eof