BLOG
Enjoy when you can, and endure when you must.
JAN 13, 2014/Python
Win8 Metro应用缓存清理之Python版

现在有了Surface Pro 2,Win8的Metro应用就会经常使用到,毕竟这些应用对触屏的体验优化更好。不过其应用的缓存可是放在C盘的,日积月累加上有些软件的缓存还真不小,对于容量不大的SSD来说看着确实还是挺揪心的。系统内置的像“磁盘清理”一类的软件貌似也都没提供Metro应用缓存的清理。那就自己来,通过搜索通常可以找到如下手动清除的方法:

1. 显示隐藏文件:资源管理器 >> 查看 >> 选项 >> 查看,勾选去掉“隐藏受保护的操作系统文件”;

2. 打开Metro应用目录:在运行(同时按Win + R)键入如下路径并回车:

%userprofile%\AppData\Local\Packages\

3. 找到对应的应用程序的文件夹,删除INetCache、INetCookies、INetHistory这三个文件夹即可。

那对于每个应用都这么做一次,岂不是够折腾的。既然是程序员,那当然就用代码来自动化完成这个任务,Python就此登场!

实现的基本步骤其实和如上手动清理的过程一样,首先需要进入Metro应用目录:

import os

LOCALAPPDATA = os.getenv('LOCALAPPDATA')
PAKAGE_HOME = os.path.join(LOCALAPPDATA, 'Packages')

系统环境变量中包含一个” LOCALAPPDATA”指向当前用户的AppData\Local目录下,因此可以很容易的定位到Metro应用目录。那接下来的工作就是循环迭代并删除INetCache、INetCookies、INetHistory这三个文件夹:

import os
import shutil

total = 0
for d in os.listdir(PAKAGE_HOME):
    ac = os.path.join(PAKAGE_HOME, d, 'AC')
    if not os.path.exists(ac):
        continue

    for name in ['INetCache', 'INetCookies', 'INetHistory']:
        root = os.path.join(ac, name)
        if os.path.exists(root):
            for curdir, directories, files in os.walk(root):
                for fn in files:
                    ap = os.path.join(root, curdir, fn)
                    total += os.path.getsize(os.path.join(root, curdir, ap))
            shutil.rmtree(root)

在删除前,我们还对文件大小进行了统计,以方便之后反馈。这只是一个简单的示例,我们可能还会考虑更多的情况或之后的反馈信息。

COMMENTS
LEAVE COMMNT