中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-18 03:44
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]批处理自动删除N天之前文件目录 查看 3,191 回复 35
16 发表于 2008-08-21 16:38 ·  中国 广东 广州 天河区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
UID 82819
性别 男
状态 离线
。。

[ Last edited by flyinspace on 2008-8-21 at 04:45 PM ]
知,不觉多。不知,乃求知
17 发表于 2008-08-21 16:42 ·  中国 广东 广州 天河区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
UID 82819
性别 男
状态 离线
问下。你生成的文件名是什么?
20080812?之样的?
知,不觉多。不知,乃求知
18 发表于 2008-08-21 16:49 ·  新加坡
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
顶楼有描述
2008-08-18
19 发表于 2008-08-21 16:51 ·  中国 广东 广州 天河区 电信
银牌会员
★★★
积分 1,206
发帖 517
注册 2007-03-25 01:18
UID 82819
性别 男
状态 离线
现在假设你的文件夹里的文件都是按日期生成的。(我不理是什么文件名了)

千万不要乱自己建立文件夹了哦。:)嘿嘿。

那么给你一个简单的代码。不过不太安全,你要保证里面的文件不可以乱
下面是一句话代码

skip 是指跳过前 5 条


for /f "skip=5 tokens=* " %%i in ('dir /b /o-d /ad-h-s') do echo 要删除的文件名为:,语法格式:


这里的代码可以测试,如果你发现满足你的条件。那么你就可以把rd那里的东西取出来了。。。。

记得,上面的条件是需要满足你说的每天建立一个备份文件夹的情况下才可以使用的。。而且该备份文件夹里不可以有其他的文件夹了。只能存在备份的文件。。

[ Last edited by flyinspace on 2008-8-21 at 04:59 PM ]
知,不觉多。不知,乃求知
20 发表于 2008-08-21 18:01 ·  中国 江苏 常州 武进区 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
UID 42345
状态 离线
翻个老贴给你 不知道时间格式和你对不

@echo off
set TT=5&set "ph=d:\000"
for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a p1=%%i,p2=100%%j%%100,p3=100%%k%%100
if %p3% gtr %TT% goto ppp
:nxt
set/a p2-=1
if %p2% equ 0 set/a p1-=1,p2=12
set/a PN2="!(p1%%4)&!(!(p1%%100))|!(p1%%400)",PN2=28+PN2
for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3+=%%i
if %p3% leq %tt% goto nxt
:ppp
set/a p3-=tt
setlocal enabledelayedexpansion
for %%i in (p2 p3) do if !%%i! lss 10 set %%i=0!%%i!
for /f "skip=7 tokens=1,3*" %%i in ('dir /ad /tc "%ph%" 2^>nul^|find /v "字节"') do (
if %p1%-%p2%-%p3% gtr %%i rd /s /q "%ph%\%%k"
)
pause&exit
简单!简单!再简单!
21 发表于 2008-08-23 22:46 ·  中国 广东 东莞 电信
中级用户
★★
积分 461
发帖 243
注册 2007-10-14 16:56
UID 99730
性别 男
状态 离线
vbs文件是否在windows98、xp\2000\2003系统下都可以运行的?

HAT的自动删N日前文件VBS似懂非懂

--------------------------------------------------------------------------------
我要在win2000下自动删除目录rardata下的15天前的文件,要怎样改呢?win2003下有forfile是比较方便.




@echo off
>"%temp%\MyDate.vbs" echo dt=date()-5
>>"%temp%\MyDate.vbs" echo s=right(year(dt),4) ^& "-" ^& right("0" ^& month(dt),2) ^& "-" ^& right("0" ^& day(dt),2)
>>"%temp%\MyDate.vbs" echo wscript.echo s
for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"' do set FiveDay=%%a
for /f %%a in ('dir /b /ad "D:\000"' do (
if "%%a" lss "%FiveDay%" (
rd /s /q "%%a"
)
)

[ Last edited by qwertl on 2008-8-23 at 10:56 PM ]
22 Re 21楼 发表于 2008-08-23 23:32 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
@echo off
setlocal enabledelayedexpansion
set SrcDir=D:\rardata
>"%tmp%\MyDel.vbs" echo dt=date()-15
>>"%tmp%\MyDel.vbs" echo s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
>>"%tmp%\MyDel.vbs" echo wscript.echo s
for /f %%a in ('cscript /nologo "%tmp%\MyDel.vbs"') do set DateFlag=%%a
for /f "tokens=*" %%a in ('dir /s /b /a-d "%SrcDir%"') do (
set FileDate=%%~ta
set FileDate=!FileDate:-=!
set FileDate=!FileDate:~0,8!
if !FileDate! lss %DateFlag% (
del /f /q "%%a"
)
)
23 发表于 2008-08-24 18:58 ·  中国 广东 东莞 电信
中级用户
★★
积分 461
发帖 243
注册 2007-10-14 16:56
UID 99730
性别 男
状态 离线
win2000的%data%是这样格式: 星期日 2008-08-24
24 Re 23楼 发表于 2008-08-24 20:05 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
还不知道怎样修改这个吗?可以看看set的帮助。
@echo off
setlocal enabledelayedexpansion
set SrcDir=D:\rardata
>"%tmp%\MyDel.vbs" echo dt=date()-15
>>"%tmp%\MyDel.vbs" echo s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
>>"%tmp%\MyDel.vbs" echo wscript.echo s
for /f %%a in ('cscript /nologo "%tmp%\MyDel.vbs"') do set DateFlag=%%a
for /f "tokens=*" %%a in ('dir /s /b /a-d "%SrcDir%"') do (
set FileDate=%%~ta
set FileDate=!FileDate:-=!
set FileDate=!FileDate:~4,10!
if !FileDate! lss %DateFlag% (
del /f /q "%%a"
)
)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
qwertl +2 2008-09-15 02:13
25 发表于 2008-08-24 22:31 ·  中国 广东 东莞 电信
中级用户
★★
积分 461
发帖 243
注册 2007-10-14 16:56
UID 99730
性别 男
状态 离线
谢谢HAT的耐心指点!

现在看正找到延迟变量的内容,批处理的内容也真不少。

如果要执行的批处理不存放在D:\rardata目录下,for /f "tokens=*" %%a in ('dir /s /b /a-d "%SrcDir%"' 的dir后要指定删去文件的目录路径吧?

这两句是起什么作用呢?
s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)

wscript.echo s

[ Last edited by qwertl on 2008-8-24 at 10:46 PM ]
26 发表于 2008-08-24 23:06 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
批处理放在什么地方都行,因为数据的目录是这里指定的:
set SrcDir=D:\rardata

s=right(year(dt),4) ^& right("0" ^& month(dt),2) ^& right("0" ^& day(dt),2)
wscript.echo s
调用VBS获取格式化的系统日期:
http://www.cn-dos.net/forum/viewthread.php?tid=41857&fpage=1&highlight=%2BHAT
27 发表于 2008-08-25 20:47 ·  中国 浙江 宁波 北仑区 电信
初级用户
积分 110
发帖 41
注册 2007-03-31 17:20
UID 83521
性别 男
状态 离线
这个我写好了,用的方法比较老套

set usbdisk=E:
set befor2days=
set nowdate=

echo wscript.echo dateadd("d",-2,date) >%tmp%\tmp.vbs
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
if %m% LSS 9 set m=0%m%
if %d% LSS 9 set d=0%d%
set/a befor2days=%y%%m%%d%

echo wscript.echo dateadd("d",-0,date) >%tmp%\tmp.vbs
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
if %m% LSS 9 set m=0%m%
if %d% LSS 9 set d=0%d%
set/a nowdate = %y%%m%%d%

........中间省略,日期整理为:20080825 这种格式,并以此为目录。

dir %usbdisk%\ /ad/on/b>%tmp%\usbdir.tmp
for /f "delims=" %%i in (%tmp%\usbdir.tmp) do (
if %%i lss %befor2days% (
rd /s/q %usbdisk%\%%i
)

下面是判断是否是2天前的,如果是,就删,如果不是,就跳过。
希望各位高手不要笑我,我解决的办法有点笨。
28 发表于 2008-09-15 02:09 ·  中国 广东 东莞 电信
中级用户
★★
积分 461
发帖 243
注册 2007-10-14 16:56
UID 99730
性别 男
状态 离线
我们经常要在日常的工作中查找文件,要说linux下最强大的文件查找工具,非find莫属。find可以从文件名、读取修改时间、大小、类型等等来筛选文件,可以完成日常几乎所有的查找需求。

  来看一个简单的例子:

  find /tmp/ -name 'galeki*'

  意思就是在/tmp目录下找出以“galeki”开头的文件,-name指出是对文件名进行筛选,是不是很简单明了?除了文件名,find还有更强大的筛选条件:

  1.时间:

参数 意义
-atime n 上一次存取时间在n*24小时前以内的文件 用linux的find来实现是简单
-ctime n 上一次状态改变在n*24小时前以内的文件
-mtime n 上一次修改时间在n*24小时前以内的文件
-newer file 比file所指的文件还要新的文件
29 发表于 2008-10-20 23:28 ·  中国 湖南 永州 电信
初级用户
积分 64
发帖 37
注册 2007-03-14 03:38
UID 81659
性别 男
状态 离线
没一个测试成功的。。
2000的时间格式为:

当前日期: 2008-10-20 星期一

希望哪位高手给个完整的
30 发表于 2008-10-21 01:15 ·  中国 福建 三明 电信
初级用户
★★
积分 175
发帖 108
注册 2008-05-19 01:24
UID 119060
性别 男
状态 离线
翻个老贴给你 ,测试成功的

@echo off
SET TT=1
set p1=%date:~0,4%
set p2=%date:~5,2%
set p3=%date:~8,2%
setlocal enabledelayedexpansion
for /l %%a in (1,1,3) do (
for /f "delims=0 tokens=*" %%i in ("!p%%a!") do set p%%a=%%i
)
if %p3% gtr %TT% goto ppp
:nxt
set/a p2-=1
if %p2% equ 0 set/a p1-=1&&set p2=12
SET/a PN1=%p1%%%4
set PN2=28
if %PN1% EQU 0 set pN2=29
for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3=%p3%+%%i
if %p3% leq %tt% goto nxt
:ppp
set/a p3=%p3%-%tt%
set p2=0%p2%
set p2=%p2:~-2,2%
set p3=0%p3%
set p3=%p3:~-2,2%
for /r "C:\新建文件夹\" %%i in (*.*) do set t=%%~ti &&call :loop "%%~fi"
pause
goto :eof
:loop
if not "%~1" == "%~f0" (
IF %p1%%p2%%p3% gtr %t:~0,4%%t:~5,2%%t:~8,2% del %1
)
论坛跳转: