求批处理或VBS文件 20

求批处理文件或VBS文件d:\iamge\目录下有很多以日期命名的文件夹如20100101,20100210等写个批处理自动将180天以前的文件夹包含自文件夹及文件删除,... 求批处理文件或VBS文件
d:\iamge\目录下有很多以日期命名的文件夹如20100101,20100210等
写个批处理自动将180天以前的文件夹包含自文件夹及文件删除,比如说今天是20100223,从20100223往前180天也就是20090823之前的全部删除
是保存成BAT运行吗 怎么不行啊
展开
 我来答
男残科
2010-02-24
知道答主
回答量:15
采纳率:0%
帮助的人:0
展开全部
天知道
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a2ec78b
2010-02-24 · TA获得超过1006个赞
知道小有建树答主
回答量:534
采纳率:0%
帮助的人:281万
展开全部
单纯用批处理或者VBS很难做到,因为涉及到进制问题,在同一年内还好判断,但跨年的话就不行了,而且年月日计算也非标准的365进制,还有闰年,日期要变更,批处理和VBS一般是满足不了这样的计算的。
所以可以换个思路,用C语言之类的计算机语言写会比较好些一点,或者,用批处理或VBS写也行,但要换个思路,由你输入当前日期前180天的日期,然后让批处理删除文件名小于该日期的所有文件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
va...e@163.com
2010-02-24 · TA获得超过350个赞
知道答主
回答量:181
采纳率:0%
帮助的人:184万
展开全部
@echo off
setlocal enabledelayedexpansion
set n=1
for /f "tokens=1-3 delims=- " %%i in ('echo %date%') do (
set num1=%%i
set num2=%%j
set num3=%%k
)
if "%num2:~0,1%"=="0" set num2=%num2:~1%
:restart
if not "%n%"=="180" (
if %num3% GTR 1 (set /a num3-=1 & set /a n+=1 & goto :restart)
set num3=31
if %num2% GTR 1 (set /a num2-=1 & set /a n+=1 & goto :restart)
set num2=12
set /a num1-=1
set /a n+=1
goto :restart
)
for /f "skip=7 tokens=4 delims= " %%i in ('dir d:\iamge') do (

if not "%%i"=="字节" if not "%%i"=="可用字节" (
set gg=%%i
set temp=!gg:~0,4!
if !temp! LSS %num1% (
del /s /Q d:\iamge\%%i && rd /Q d:\iamge\%%i
) else (
if !temp! EQU %num1% (
set temp=!gg:~4,1!
if !temp! EQU 0 (
set temp=!gg:~ 5,1!
if !temp! LSS %num2% (
del /s /Q d:\iamge\%%i && rd /Q d:\iamge\%%i
) else (
if !temp! EQU %num2% (
set temp=!gg:~6,2!
if !temp! LSS %num3% (del /s /Q d:\iamge\%%i && rd /Q d:\iamge\%%i)
)
)
) else (
set temp=!gg:~4,2!
if !temp! LSS %num2% (
del /s /Q d:\iamge\%%i && rd /Q d:\iamge\%%i
) else if !temp! EQU %num2% (
set temp=!gg:~6,2!
if !temp! LSS %num3% (del /s /Q d:\iamge\%%i && rd /Q d:\iamge\%%i)
)
)
)
)
)
)

保存为bat文件运行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ec46f874f
2010-02-27 · TA获得超过137个赞
知道答主
回答量:75
采纳率:100%
帮助的人:83.2万
展开全部
因为每个月天数不同,要精确到天,代码比较多,可以精确到月

可以运行的,我加几行代码,可以显示正在删除哪个文件,因为其中用到的find及dir指令,速度慢了下来,目的是可以达到的

@echo off
::保留最近6个月的文件
set N=6
::要进行操作的文件路径
set address=D:\iamge

%address:~0,2%
cd %address%
if not %errorlevel%==0 exit
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%

:check
for /f %%i in ('dir /b *%year%%month%*') do echo %%i>>%temp%\file.txt
if %month:~0,1%==0 set month=%month:~1,1%
if not %month%==1 (set /a month-=1
) else (
set month=12
set /a year-=1)
)
if "%month:~1,1%"=="" set month=0%month%
set /a N-=1
if not %N%==0 goto check

for /f %%i in ('dir /b') do call :删除文件和文件夹 %%i
del /q/s %temp%file.txt
exit

:删除文件和文件夹
find "%1" %temp%\file.txt>nul
if not %errorlevel%==0 (
cls
echo 正在删除文件%~n1.*...
echo 正在删除文件夹%~n1...
del /q/s %~n1.*
rd /q/s %~n1
) else cls&&echo 正在检查文件...
goto :eof

下面是一段新建一批文件夹代码,可以当测试用,有时间我给你写一个可以精确到天的代码,请多多指教
@echo off
::文件数目
set n=400

d:
md iamge
cd d:\iamge

set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
:start
md %year%%month%%day%

if %month:~0,1%==0 set month=%month:~1,1%
if %day:~0,1%==0 set day=%day:~1,1%

if not %day%==1 (set /a day-=1) else (
set day=31
if %month%==1 (
set month=12
set /a year-=1) else set /a month-=1
)

if "%month:~1,1%"=="" set month=0%month%
if "%day:~1,1%"=="" set day=0%day%
set /a n-=1
if not %n%==0 goto start

精确到天的代码已经研究出来的,请笑纳:
@echo off
::保存天数
set days=180
set dtemp=%days%

::要进行操作的文件路径
set address=d:\iamge

%address:~0,2%
cd %address%
if not %errorlevel%==0 exit

set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%

:days前的日期
if %month:~0,1%==0 set month=%month:~1,1%
if %day:~0,1%==0 set day=%day:~1,1%
if not %day%==1 (set /a day-=1
) else (
if not %month%==1 (set /a month-=1) else set month=12&&set /a year-=1
if %month%==2 set day=31
if %month%==4 set day=31
if %month%==6 set day=31
if %month%==8 set day=31
if %month%==9 set day=31
if %month%==11 set day=31
if %month%==1 set day=31
if %month%==5 set day=30
if %month%==7 set day=30
if %month%==10 set day=30
if %month%==12 set day=30
if %month%==3 call :是否润年
)
::补零
if "%day:~1,1%"=="" set day=0%day%
if "%month:~1,1%"=="" set month=0%month%
set /a days-=1
set terday=%year%%month%%day%
if not %days%==1 goto days前的日期

for /f %%i in ('dir /b') do call :删除文件 %%i
echo 删除%dtemp%天前的文件夹OK!
pause
exit

:删除文件
set files=%~n1
if %files% LSS %terday% rd /q/s %files%
goto :eof

:是否润年
set day=28
set /a ytemp=%year%/4
set /a ytemp=%ytemp%*4
if %ytemp%==%year% set day=29
goto :eof
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式