用批处理查找符合时间范围的文件
起因:
看到 shijianxin 兄的提问,问题是如何查找创建于某一时间段的文件。动手前我最先想到的是 Windows Resource Kits 或 2003 下的 forfiles.exe 看了一下帮助后很让我失望,forfiles 只能选择大于或等于,或者小于或等于某日期的文件,而不能选择某一时间段的文件。看来只好动手写批处理了。想找一下问题的入手点,发觉比较困难,想到用 Ritchie Lawrence 的 DateToDays 函数,效率、速度会怎样?我马上否定了这种方案,再想到用 forfiles 分别生成一个大于和小于某日期的文件列表,然后取这两个文件重复的部分。效率、速度仍然不怎么样,再想一下于是乎就有了下面的脚本。
说明:这是一个最简单的版本,只有代码的主干,也比较便于理解所以先贴出来。我随后会将其完善成实用的批程序的。
用法:filedate YY-MM-DD YY-MM-DD ,参数1为起始日期,参数2为结束日期,如:2006-06-30 2006-07-09
[ Last edited by 无奈何 on 2006-8-3 at 22:57 ]
起因:
看到 shijianxin 兄的提问,问题是如何查找创建于某一时间段的文件。动手前我最先想到的是 Windows Resource Kits 或 2003 下的 forfiles.exe 看了一下帮助后很让我失望,forfiles 只能选择大于或等于,或者小于或等于某日期的文件,而不能选择某一时间段的文件。看来只好动手写批处理了。想找一下问题的入手点,发觉比较困难,想到用 Ritchie Lawrence 的 DateToDays 函数,效率、速度会怎样?我马上否定了这种方案,再想到用 forfiles 分别生成一个大于和小于某日期的文件列表,然后取这两个文件重复的部分。效率、速度仍然不怎么样,再想一下于是乎就有了下面的脚本。
说明:这是一个最简单的版本,只有代码的主干,也比较便于理解所以先贴出来。我随后会将其完善成实用的批程序的。
用法:filedate YY-MM-DD YY-MM-DD ,参数1为起始日期,参数2为结束日期,如:2006-06-30 2006-07-09
无奈何发表于 2006-07-31 21:48
- @echo off
- if "%1" NEQ "$" (
- set Bdate=%1
- set Edate=%2
- for /f "tokens=1,2 delims=§" %%a in ('"%~0" $^|sort') do (
- call :sub "%%a" "%%b"
- )
- ) else (
- for %%i in (*) do echo %%~ti§%%i
- echo.%Bdate% 00:00
- echo.%Edate% 99:99
- )
- goto :EOF
- :sub
- if "%~1" == "%Edate% 99:99" set flag=0
- if "%flag%" == "1" echo."%~2"
- if "%~1" == "%Bdate% 00:00" set flag=1
- goto :EOF
[ Last edited by 无奈何 on 2006-8-3 at 22:57 ]
☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

精华I