如何实现指定日期删除指定文件夹下的所有文件

时间:2023-02-06 23:08:44
Set fso = CreateObject("Scripting.FileSystemObject")
Value = "2,8,21,38" '月,日,时,分
Path = "C:\清理\*.*"
On Error Resume Next
Do
   If DatePart("m",Now)&","&DatePart("d",Now)&","&DatePart("h",Now)&","&DatePart("n",Now)=Value Then
      fso.DeleteFile Path,True:Exit Do
   End If
   WSH.Sleep 100
Loop
 

这个脚本只能删除清理目录下的文件,却不能删除清理目录下子文件夹里的文件。
请问如何才能实现,指定日期和指定时间倒是实现了。
这是网上摘录下来的,我不太清楚,顾此一问。

20 个解决方案

#1


在XP下测试过,对日期和时间的判断很准确,只是只读文件不能删除。
只能删除目录下的文件,不能删除目录下子文件夹里的文件。

#2


或者说在一个脚本里,能不能删除多个文件夹下的文件呢,它们并不是同一个目录。
我对这类代码不太了解,还望前辈们详细的说明。

#3


这脚本不就是用datepart来得到日期时间元素组合成的字符串,对比value,如果等于就删文件然后退出,如果不等于继续loop

datepart的元素有(假设给定日期是now,也就是当天)

m = 返回月
d = 返回今天是一个月中的第几日
h = 返回当前的小时
n = 返回当前的分

除此之外还有

yyyy = 返回年
y = 返回今天是一年中的第几天
q = 返回今天是第几个季度
s = 返回秒
w = 返回是一个星期中的第几日,这里要注意,默认是周日开始计算,比如周二会返回3
ww = 返回一年中的第几个星期

脚本中其他的,也没什么好解释的了

你如果用这个脚本删除多个文件夹下的文件,可以把fso.DeleteFile Path,True这一行后添加几行就行

如果想枚举一个文件夹下的N层子目录进行删除,可以办到,但是这个脚本还差远了,呵呵.

#4


比方说我还想删除
C:\清理\09
C:\清理\10子文件夹下所有文件,代码如何添加。我比较木,对这些不太了解呢。
我刚试着添加,提示句柄什么的,哎。都给我解答出来了,自个还是不会弄。

#5


引用 4 楼 ttanglijun 的回复:
比方说我还想删除
C:\清理\09
C:\清理\10子文件夹下所有文件,代码如何添加。我比较木,对这些不太了解呢。
我刚试着添加,提示句柄什么的,哎。都给我解答出来了,自个还是不会弄。


这个需要写个sub过程然后反复的call传递参数给FileSystemObject对象的subfolders,这样就会形成枚举,另外你的思路有些僵化,呵呵。因为你的最小分辨时间为分钟,那为啥sleep100毫秒呢,嫌CPU太闲了,完全可以设成sleep30000毫秒,这样系统开销就小多了。

今天太晚了,明天你再写不出来,我就给你写个,呵呵。

#6


回复于:2011-02-09 02:14:05
羊老师好敬业。。
学习中。。

#7


这个用计划任务+bat更容易实现罢

指定日期和时间          --可以用计划任务


删除清理目录下子文件夹里的文件 --在bat文件里用del命令就行了

#8


引用 5 楼 forever_young 的回复:
引用 4 楼 ttanglijun 的回复:
比方说我还想删除
C:\清理\09
C:\清理\10子文件夹下所有文件,代码如何添加。我比较木,对这些不太了解呢。
我刚试着添加,提示句柄什么的,哎。都给我解答出来了,自个还是不会弄。


这个需要写个sub过程然后反复的call传递参数给FileSystemObject对象的subfolders,这样就会形成枚举,另外你的思路有些僵化,……


呵,我是门外汉,干脆给我修改下。写出来吧。呵呵。
至于楼上说用bat,不能后台运行。所以感觉不好。

#9


引用 9 楼 ttanglijun 的回复:
引用 5 楼 forever_young 的回复:
引用 4 楼 ttanglijun 的回复:
比方说我还想删除
C:\清理\09
C:\清理\10子文件夹下所有文件,代码如何添加。我比较木,对这些不太了解呢。
我刚试着添加,提示句柄什么的,哎。都给我解答出来了,自个还是不会弄。


这个需要写个sub过程然后反复的call传递参数给FileSystemObject对象的sub……


将批处理转换成EXE  然后注册成服务  同样可以后台运行的

#10


引用 6 楼 guyawansong 的回复:
回复于:2011-02-09 02:14:05
羊老师好敬业。。
学习中。。


必须的膜拜~

#11


门外汉就好,门外汉好糊弄,嘿嘿

不过还是给你加上点注释,看得清楚些。


'枚举删除多级路径下的文件 - Forever_Young
On Error Resume Next 

WorkPath="c:\清理"      '这里把需要操作的路径赋值给变量WorkPath
DefTime="2-10-10-10"   '这里定时 - 格式为“月-日-时-分” 

while nowtime<>deftime '这里开始条件循环,如果条件符合就中止循环
nowtime=datepart("m",now)&"-"&datepart("d",now)&"-"&datepart("h",now)&"-"&datepart("n",now)   '获取当前时间
wscript.sleep 30000   '延时30秒
wend

Call DelAllFiles(WorkPath)   '开始调用删除过程

'枚举并删除文件
Sub DelAllFiles(sPath)
  set fs = CreateObject("Scripting.FileSystemObject")
    set folder = fs.GetFolder(sPath)
      fs.deletefile folder.path&"\*.*",true
        For each item in folder.SubFolders
          DelAllFiles(item.Path)
        Next
     set folder = Nothing
     set fs = Nothing
End Sub

#12


Young做VB脚本挺快的,呵呵

#13


引用 13 楼 dianyancao 的回复:
Young做VB脚本挺快的,呵呵


下午都写好了的,等着楼主下指令呢,呵呵

#14


谢谢羊老师。呵呵,真有用。太谢谢了。

#15


呵,结贴了,不过还有个小问题,如果是每个月的某天都执行删除的动作。
时间的判断该怎么写呢。呵呵,很贪心哦。

#16


还有就是,如果我把3000改成100  会有什么后果。嘿嘿。

#17


引用 17 楼 ttanglijun 的回复:
还有就是,如果我把3000改成100 会有什么后果。嘿嘿。


改成100,你的CPU使用率持续时间会很高,如果以分钟为判断,没必要设置那么短。

#18


引用 16 楼 ttanglijun 的回复:
呵,结贴了,不过还有个小问题,如果是每个月的某天都执行删除的动作。
时间的判断该怎么写呢。呵呵,很贪心哦。


两个办法,1、让脚本长时间运行不退出,2、使用计划任务,看你拿这个脚本来干吗了,如果就是普通的清理,那就最好是第2种

#19


引用 19 楼 forever_young 的回复:
引用 16 楼 ttanglijun 的回复:
呵,结贴了,不过还有个小问题,如果是每个月的某天都执行删除的动作。
时间的判断该怎么写呢。呵呵,很贪心哦。


两个办法,1、让脚本长时间运行不退出,2、使用计划任务,看你拿这个脚本来干吗了,如果就是普通的清理,那就最好是第2种


计划任务确实很好用    

#1


在XP下测试过,对日期和时间的判断很准确,只是只读文件不能删除。
只能删除目录下的文件,不能删除目录下子文件夹里的文件。

#2


或者说在一个脚本里,能不能删除多个文件夹下的文件呢,它们并不是同一个目录。
我对这类代码不太了解,还望前辈们详细的说明。

#3


这脚本不就是用datepart来得到日期时间元素组合成的字符串,对比value,如果等于就删文件然后退出,如果不等于继续loop

datepart的元素有(假设给定日期是now,也就是当天)

m = 返回月
d = 返回今天是一个月中的第几日
h = 返回当前的小时
n = 返回当前的分

除此之外还有

yyyy = 返回年
y = 返回今天是一年中的第几天
q = 返回今天是第几个季度
s = 返回秒
w = 返回是一个星期中的第几日,这里要注意,默认是周日开始计算,比如周二会返回3
ww = 返回一年中的第几个星期

脚本中其他的,也没什么好解释的了

你如果用这个脚本删除多个文件夹下的文件,可以把fso.DeleteFile Path,True这一行后添加几行就行

如果想枚举一个文件夹下的N层子目录进行删除,可以办到,但是这个脚本还差远了,呵呵.

#4


比方说我还想删除
C:\清理\09
C:\清理\10子文件夹下所有文件,代码如何添加。我比较木,对这些不太了解呢。
我刚试着添加,提示句柄什么的,哎。都给我解答出来了,自个还是不会弄。

#5


引用 4 楼 ttanglijun 的回复:
比方说我还想删除
C:\清理\09
C:\清理\10子文件夹下所有文件,代码如何添加。我比较木,对这些不太了解呢。
我刚试着添加,提示句柄什么的,哎。都给我解答出来了,自个还是不会弄。


这个需要写个sub过程然后反复的call传递参数给FileSystemObject对象的subfolders,这样就会形成枚举,另外你的思路有些僵化,呵呵。因为你的最小分辨时间为分钟,那为啥sleep100毫秒呢,嫌CPU太闲了,完全可以设成sleep30000毫秒,这样系统开销就小多了。

今天太晚了,明天你再写不出来,我就给你写个,呵呵。

#6


回复于:2011-02-09 02:14:05
羊老师好敬业。。
学习中。。

#7


这个用计划任务+bat更容易实现罢

指定日期和时间          --可以用计划任务


删除清理目录下子文件夹里的文件 --在bat文件里用del命令就行了

#8


引用 5 楼 forever_young 的回复:
引用 4 楼 ttanglijun 的回复:
比方说我还想删除
C:\清理\09
C:\清理\10子文件夹下所有文件,代码如何添加。我比较木,对这些不太了解呢。
我刚试着添加,提示句柄什么的,哎。都给我解答出来了,自个还是不会弄。


这个需要写个sub过程然后反复的call传递参数给FileSystemObject对象的subfolders,这样就会形成枚举,另外你的思路有些僵化,……


呵,我是门外汉,干脆给我修改下。写出来吧。呵呵。
至于楼上说用bat,不能后台运行。所以感觉不好。

#9


引用 9 楼 ttanglijun 的回复:
引用 5 楼 forever_young 的回复:
引用 4 楼 ttanglijun 的回复:
比方说我还想删除
C:\清理\09
C:\清理\10子文件夹下所有文件,代码如何添加。我比较木,对这些不太了解呢。
我刚试着添加,提示句柄什么的,哎。都给我解答出来了,自个还是不会弄。


这个需要写个sub过程然后反复的call传递参数给FileSystemObject对象的sub……


将批处理转换成EXE  然后注册成服务  同样可以后台运行的

#10


引用 6 楼 guyawansong 的回复:
回复于:2011-02-09 02:14:05
羊老师好敬业。。
学习中。。


必须的膜拜~

#11


门外汉就好,门外汉好糊弄,嘿嘿

不过还是给你加上点注释,看得清楚些。


'枚举删除多级路径下的文件 - Forever_Young
On Error Resume Next 

WorkPath="c:\清理"      '这里把需要操作的路径赋值给变量WorkPath
DefTime="2-10-10-10"   '这里定时 - 格式为“月-日-时-分” 

while nowtime<>deftime '这里开始条件循环,如果条件符合就中止循环
nowtime=datepart("m",now)&"-"&datepart("d",now)&"-"&datepart("h",now)&"-"&datepart("n",now)   '获取当前时间
wscript.sleep 30000   '延时30秒
wend

Call DelAllFiles(WorkPath)   '开始调用删除过程

'枚举并删除文件
Sub DelAllFiles(sPath)
  set fs = CreateObject("Scripting.FileSystemObject")
    set folder = fs.GetFolder(sPath)
      fs.deletefile folder.path&"\*.*",true
        For each item in folder.SubFolders
          DelAllFiles(item.Path)
        Next
     set folder = Nothing
     set fs = Nothing
End Sub

#12


Young做VB脚本挺快的,呵呵

#13


引用 13 楼 dianyancao 的回复:
Young做VB脚本挺快的,呵呵


下午都写好了的,等着楼主下指令呢,呵呵

#14


谢谢羊老师。呵呵,真有用。太谢谢了。

#15


呵,结贴了,不过还有个小问题,如果是每个月的某天都执行删除的动作。
时间的判断该怎么写呢。呵呵,很贪心哦。

#16


还有就是,如果我把3000改成100  会有什么后果。嘿嘿。

#17


引用 17 楼 ttanglijun 的回复:
还有就是,如果我把3000改成100 会有什么后果。嘿嘿。


改成100,你的CPU使用率持续时间会很高,如果以分钟为判断,没必要设置那么短。

#18


引用 16 楼 ttanglijun 的回复:
呵,结贴了,不过还有个小问题,如果是每个月的某天都执行删除的动作。
时间的判断该怎么写呢。呵呵,很贪心哦。


两个办法,1、让脚本长时间运行不退出,2、使用计划任务,看你拿这个脚本来干吗了,如果就是普通的清理,那就最好是第2种

#19


引用 19 楼 forever_young 的回复:
引用 16 楼 ttanglijun 的回复:
呵,结贴了,不过还有个小问题,如果是每个月的某天都执行删除的动作。
时间的判断该怎么写呢。呵呵,很贪心哦。


两个办法,1、让脚本长时间运行不退出,2、使用计划任务,看你拿这个脚本来干吗了,如果就是普通的清理,那就最好是第2种


计划任务确实很好用