用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件
核心代码:
@echooff
::byoicu#lsxk.org
::15:172011-1-13
::如果只是删除指定日期或N天前修改的文件,用forfiles即可
FORFILES/P"C:\测试目录"/S/M*.log/D-3/C"cmd/cif@isdir==FALSEechodel@file"
::指定日期(包含)前修改的文件:/D-yyyy/mm/dd
::以下是流水账
::使用限制:控制面板里设定日期格式为中文(中国)
::只有dir/tc才能查看到文件创建时间,默认dir都是dir/tw
::为了取出创建时间,只好用两次for+find,肯定很慢。
cd/d你的目录
::如果要包含子目录,用for/r.%%ain(*)
::显示文件修改时间
for%%ain(*)doecho"%%~ta"
::中文格式时相当于
for%%ain(*)dofor/f"tokens=1,2*delims="%%bin(
'dir/tw"%%a"^|find/i"%%~nxa"'
)doecho"%%b%%c"
::删除某个时间后修改过的文件(这个简单)
for%%ain(*)doif"%%~ta"gtr"2008-04-01"echodel"%%a"
::这个才是显示文件创建时间
for%%ain(*)dofor/f"tokens=1,2*delims="%%bin(
'dir/tc"%%a"^|find/i"%%~nxa"'
)doecho"%%b%%c"
::删除某个时间之后创建的文件,如果要删除某个时间之前创建的,更改两
::处gtr为lss。除了日期外,增加判断时间,可以去掉else段。
for%%ain(*)dofor/f"tokens=1,2*delims="%%bin(
'dir/tc"%%a"^|find/i"%%~nxa"')do(
if"%%b"gtr"2010-12-15"(
echodel"%%a"
)else(
if"%%b"equ"2010-12-15"if"%%c"gtr"14:50"echodel"%%a"
)
)
::用批处理计算时间受到系统的日期格式限制,影响到用set取某一字段的值,
::批处理计算时间方法过于复杂,要么只用vbs脚本删除文件,要么用批处理
::配合vbs脚本删除。
::取10天之前的日期,取回放入变量OldDate
echowscript.echodateadd("d",-10,date)>GetOldDate.vbs
for/f%%ain('cscript/nologoGetOldDate.vbs')dosetOldDate=%%a
echo%OldDate%
delGetOldDate.vbs
::VBScript里没有Format函数,Year、Month、Day等函数取数值后也要处理小
::于10的数字,只能用下面的方法整理日期格式
echowscript.echodateadd("d",-10,date)>GetOldDate.vbs
for/f"tokens=1,2,3*delims=-/."%%iin('cscript/nologoGetOldDate.vbs')do(
sety=%%i
setm=%%j
setd=%%k
)
if%m%LSS10setm=0%m%
if%d%LSS10setd=0%d%
setOldDate=%y%-%m%-%d%
echo%OldDate%
delGetOldDate.vbs
::综合上文,最后得到我们想要的结果
::删除10天前创建的旧文件(不含子目录)
echowscript.echodateadd("d",-10,date)>GetOldDate.vbs
for/f"tokens=1,2,3*delims=-/."%%iin('cscript/nologoGetOldDate.vbs')do(
sety=%%i
setm=%%j
setd=%%k
)
if%m%LSS10setm=0%m%
if%d%LSS10setd=0%d%
setOldDate=%y%-%m%-%d%
delGetOldDate.vbs
for%%ain(*)dofor/f"tokens=1,2*delims="%%bin(
'dir/tc"%%a"^|find/i"%%~nxa"')do(
if"%%b"lss"%OldDate%"echodel"%%a"
)
::删除10天前修改的旧文件(不含子目录)
echowscript.echodateadd("d",-10,date)>GetOldDate.vbs
for/f"tokens=1,2,3*delims=-/."%%iin('cscript/nologoGetOldDate.vbs')do(
sety=%%i
setm=%%j
setd=%%k
)
if%m%LSS10setm=0%m%
if%d%LSS10setd=0%d%
setOldDate=%y%-%m%-%d%
delGetOldDate.vbs
for%%ain(*)doif"%%~ta"lss"%OldDate%"echodel"%%a"
::本文全部用echodel代替del,只是显示要删除的文件,并不实际删除。
pause
goto:eof