Windows下删除系统垃圾的脚本

Windows下删除系统垃圾的脚本

前段时间寝室的个同胞,刚买电脑不久,然后让它用工具删系统垃圾都不会,实在没办法 用python给他写了个,当然只有最简单的功能

[Copy to clipboard] [ - ]
CODE:
#coding:utf-8
import os
#from glob import glob

if os.name == 'nt':
        if 'HOMEPATH' in os.environ:
                home = os.environ['HOMEDRIVE'] + os.environ['HOMEPATH']
        else:
                home = os.environ['HOMEPATH']

workpath = os.path.join(home,'Local Settings')
#递归删除文件
#里面和下面的函数用try是抛出删除正在使用的零时文件出错
def delfile(path):
        for file in os.listdir(path):     
                if os.path.isfile(os.path.join(path,file)):
                        try:
                                print "\n删除垃圾文件: %s" % (os.path.join(path,file))
                                os.remove(os.path.join(path,file))
                        except:
                                pass
                elif os.path.isdir(os.path.join(path,file)):
                        delfile(os.path.join(path,file))
                else:
                        pass
delfile(os.path.join(workpath,'Temp'))
delfile(os.path.join(workpath,'Temporary Internet Files'))
#删除文件家的时候必须为空文件夹,而且只能从最里层删起
def deldir(pa):
        for i in os.listdir(pa):
                if os.path.isdir(os.path.join(pa,i)):
                        if len(os.listdir(os.path.join(pa,i))) > 0:
                                deldir(os.path.join(pa,i))
                                try:
                                        os.rmdir(os.path.join(pa,i))
                                except:
                                        pass
                        else:
                                try:
                                        print "\n删除文件夹 %s" % (os.path.join(pa,i))
                                        os.rmdir(os.path.join(pa,i))
                                except:
                                        pass
               
deldir(os.path.join(workpath,'Temp'))
deldir(os.path.join(workpath,'Temporary Internet Files'))
print """
     系统产生的零时垃圾文件清理完毕!
     """
raw_input("请按回车键退出!")

                               

然后用cx_freeze给他弄成了exe,让它电脑时间晚长了就双击一次

呵呵,支持下

看来问题不怕解决不了,就怕发现不了问题。
我觉得你删除文件夹的那几句很可笑
楼上 有没有什么好点的办法!
其实我可以告诉你,windows底层的文件删除 原理 基本跟这个差不多
删除一个有文件的多级文件夹 先删掉文件,然后嘴从里层开始删除文件夹知道最外层。
下面这个是在pywin的手册上找到的代码 一个关于删除文件夹的

[Copy to clipboard] [ - ]
CODE:
def del_dir(self,path):

        for file in os.listdir(path):

                file_or_dir = os.path.join(path,file)

                if os.path.isdir(file_or_dir) and not os.path.islink(file_or_dir):

                        del_dir(file_or_dir) #it's a directory reucursive call to function again

                else:

                        try:

                                os.remove(file_or_dir) #it's a file, delete it

                        except:

                                #probably failed because it is not a normal file

                                win32api.SetFileAttributes(file_or_dir, win32con.FILE_ATTRIBUTE_NORMAL)

                                os.remove(file_or_dir) #it's a file, delete it

                os.rmdir(path) #delete the directory here

为什么不换个方式? 比如用 os.system("rmdir dirpath /s /q")

当然我还是觉得你的方式稳妥,只是我喜欢最简练的
那天也是实在没什么事,新闻业看完了,然后就想到写这个,当然方法很多的,如果想简单,其实用批处理都可以写的
代码很累赘 改了下

[Copy to clipboard] [ - ]
CODE:
#coding=utf-8
import os

#得到系统的home目录例如'C:\\Documents and Settings\\Administrator'
def gethome():
        if os.name == 'nt':
                if 'HOMEPATH' in os.environ:
                        home = os.environ['HOMEDRIVE'] + os.environ['HOMEPATH']
                else:
                        home = os.environ['HOMEPATH']
        return home

def deldir(pa):
        for file in os.listdir(pa):
                #如果是文件就删除
                file_or_dir = os.path.join(pa,file)
                if os.path.isfile(file_or_dir):
                        try:
                                print "\n删除垃圾文件:  %s" % file_or_dir
                                os.remove(file_or_dir)
                        except:
                                pass
               
                elif os.path.isdir(file_or_dir):
                        #如果是文件夹并且不为空递归删除,递归完后,就为空了所以回归删除目录
                        if len(os.listdir(file_or_dir))>0:
                                deldir(file_or_dir)
                                try:
                                        print "\n删除文件夹 %s" % file_or_dir
                                        os.rmdir(file_or_dir)
                                except:
                                        pass
                        #其它的情况,如果目录为空直接删除目录
                        else:
                                try:
                                        print "\n删除文件夹 %s" % file_or_dir
                                        os.rmdir(file_or_dir)
                                except:
                                        pass
                else:
                        pass

if __name__=='__main__':
        home = gethome()
        workpath = os.path.join(home,'Local Settings')
        deldir(os.path.join(workpath,'Temp'))
        deldir(os.path.join(workpath,'Temporary Internet Files'))
        #删除最近打开的文件记录历史
        #delpaht(os.path.join(home,'Recent')
        print """
                        系统产生的零时垃圾文件清理完毕!
                        """
        raw_input("""请按回车键退出!""")

才发现 那个代码贴上去的 里面我掉了一个括号 然后还打错了2个字母
嘿嘿 在家里的时候一直通不过 今天无意看到的
试试os.walk方法

walk( top[, topdown=True [, onerror=None]])

manual里的例子,可供参考,注意它的注释里的提示

[Copy to clipboard] [ - ]
CODE:
# Delete everything reachable from the directory named in 'top',
# assuming there are no symbolic links.
# CAUTION:  This is dangerous!  For example, if top == '/', it
# could delete all your disk files.
import os
for root, dirs, files in os.walk(top, topdown=False):
    for name in files:
        os.remove(os.path.join(root, name))
    for name in dirs:
        os.rmdir(os.path.join(root, name))