用批处理要实现自动删除3个月以前的测试数据,数据保存在目录C:\DATA\ 文件夹是以时间命名的 如: 20120119

如题所述

第1个回答  2012-02-02
autoit 脚本简单易学

#include <Date.au3>
#include <File.au3>

$path = "C:\DATA" ;文件夹路径
$before = 90 ;几天前

;得到n天前年月日字符串
$str = _DateAdd( 'd', -1 * $before, _NowCalcDate())
$time = StringLeft($str, 4) & StringMid($str, 6, 2) & StringMid($str, 9)

;得到路径中的所有子文件夹名称,存入数组
$file = _FileListToArray($path, "*.rar", 1)
;循环遍历数组
For $i = 1 To $file[0]
If StringCompare(StringLeft($file[$i], 8), $time)<0 Then
FileDelete($path & "\" & $file[$i])
EndIf
Next

TrayTip("", "谢谢使用!", 5)
Sleep(3000)本回答被提问者采纳
第2个回答  2012-01-30
确认显示删除的文件夹没问题后,把倒数第二行echo删除再运行。
@echo off
set n=90
pushd c:\data
for /f "skip=%n%" %%i in ('dir/b/ad/o-d 201*') do (
echo rd "%%i" /s/q)
pause追问

谢谢~~ 但是我的文档都是压缩档呢怎么按创建的时间来删除前3个月的数据 命名也是以如上方式来命名如20120130 这样的呢 系统是XP 的系统 时间格式是 如:月/日/年 用DATE/? 显示是
MON 01/2012/30

追答

我的bat脚本你试了吗,保存最新的90天其余的删除,根据文件创建日期排序删除,与显示方式无关。

追问

不能用哦 ,试了下连2006年创建的都不能删。

追答

echo删除了吗?
上面第一行就写明白了。

为了保险起见先显示要删除的命令,验证无误后把echo删除就可正式删除了。

追问

删了啊,请教下我的C:DATE 都是*.rar 的压缩文件 怎么删前3个月的数据
for /f "skip=%n%" %%i in ('dir/b/ad/o-d 201*') do (
echo rd "%%i" /s/q)
这句话能帮忙解释下吗?

追答

原来写的是删除文件夹的,如果是删除rar,试试下面的代码。
n=90,就是3个月的天数,skip=%n%,就是跳过最新90个文件不处理,删除其余的文件,还有问题的话,可明天加我百度hi交流。
@echo off
set n=90
pushd c:\data
for /f "skip=%n%" %%i in ('dir/b/ad/o-d 201*.rar') do (
del /f/q "%%i" )
pause