




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
清理winsxs的小工具因为磁盘空间不够了,所以想起来清理一下系统垃圾文件,主要目标就是臭名昭著的winsxs目录。这个winsxs就是微软为了解决“dll hell”问题,结果是好比在windows系统里安置了一个毫无节制不断增大的“肿瘤”。听说微软研究院现在在研究这个问题,不过我想我的硬盘空间不够大,等不到这个补丁出来的时候,所以只好自己动手了。winsxs目录下的文件都是系统要用的各种库文件,system32下存放了这些dll的最新的版本,所有老版本的dll都放在winsxs下。所以只要你安装程序或者更新补丁,system32下的文件就会被更新,而同时winsxs就会增加一些旧文件,所以我们的C盘空间就在持续不断地减少,直到磁盘容量不够,被迫重装系统为止,如果你足够幸运,可以直接安装最新的SP的话,或许可以为winsxs节约一点微薄的空间。winsxs目录下的不同版本文件都存放在特定命名规则的目录下,比如C:Windowswinsxsdir msil_microsoft.transactions.bridge.resources*驱动器 C 中的卷是 vista卷的序列号是 989F-EFF3 C:Windowswinsxs 的目录 msil_microsoft.transactions.bridge.resources_b03f5f7f11d50a3a_6.0.6000.16386_zh-cn_1cde5a17d78fb5ecmsil_microsoft.transactions.bridge.resources_b03f5f7f11d50a3a_6.0.6000.16716_zh-cn_1cd75781d79605cfmsil_microsoft.transactions.bridge.resources_b03f5f7f11d50a3a_6.0.6000.20876_zh-cn_060fb27df137fddfmsil_microsoft.transactions.bridge.resources_b03f5f7f11d50a3a_6.0.6001.18000_zh-cn_1cb2dbd3d7e75eb8msil_microsoft.transactions.bridge.resources_b03f5f7f11d50a3a_6.0.6001.18106_zh-cn_1cb252ffd7e7f8cfmsil_microsoft.transactions.bridge.resources_b03f5f7f11d50a3a_6.0.6001.22221_zh-cn_05e71ebbf18d0b5emsil_microsoft.transactions.bridge.resources_b03f5f7f11d50a3a_6.0.6002.18005_zh-cn_1c8e610fd838f2cc 0 个文件 0 字节 7 个目录 5,382,139,904 可用字节这里的各个部分用下划线分割,其中我们关注的是“6.0.6000.16386”部分,它表示旧文件的版本号,之前则是唯一文件标识,之后是语言,最后部分是散列值(防止名字冲突)。本工具的设计思想就是删除所有的旧文件。所有满足如下全部条件的目录都会被移动到C:Windowswinsxs_del目录中。1. 存在比自身更新的版本 2. 本身不是最新版本运行工具前的C盘剩余空间: 所列文件总数: 4473 个文件 3,336,376,627 字节 7655 个目录 326,840,320 可用字节 C:Windowswinsxs_del运行工具并且执行命令for /d %v in (%SystemRoot%winsxs_del*.*) do rd /s /q %v删除所有可以删除的无用文件之后的剩余空间: 所列文件总数: 52 个文件 7,555,048 字节 131 个目录 5,383,979,008 可用字节 C:Windowswinsxs_del工具源代码如下:请保存为winsxs_clear.bat即可。所有不再需要的文件会移动到c:windowswinsxs_del目录中,可以直接进行删除。执行时候,务必请使用“管理员”权限。1echooff2rem 获取windows版本3set move_dir=%SystemRoot%winsxs_del4ifnotexist %move_dir%nul md %move_dir%5set winver=none6FOR/F eol=; tokens=4* delims= %i in (ver)doset winver=%i7if%winver%=nonegoto enover8echo windows version is %winver%, ready to list winsxs dir.9ifnotexist %SystemRoot%winsxsnul goto enosxs1011set ver_prefix=%winver:0,-1%12echo list winsxs finished! now ready to clear duplicated files13echodir/ad %SystemRoot%winsxs*_%ver_prefix%*1415if%1=run-winsxs-generatedgoto:lSkipGen16rem 准备生成代码17copy/y %f0%temp%nx0 nul18echorem genereted code here %temp%nx019echo:ldcdStat1%temp%nx020echoset end4=%arg:%ver_prefix%=%temp%nx021echogoto ldcdStat2 %temp%nx022echo:ldcdStat3%temp%nx023echoset end4a=%arg:%winver%=%temp%nx024echogoto ldcdStat4 %temp%nx025rem notepad %temp%nx026%temp%nx0run-winsxs-generated27goto:EOF2829:lSkipGen30FOR/F eol=; tokens=1-4 delims= %a in (dir/ad %SystemRoot%winsxs*_%ver_prefix%*)do(31 if%c=call:fnDoClear %d32)3334echo clear OK!35goto:EOF3637:enover38echo could not get windows version, abort!39goto:EOF4041:enosxs42echonot found %SystemRoot%winsxs! maybe no privilege or lower windows!43echo only support windows XP and later!44goto:EOF4546:fnDoClear47rem arg: dir_name48FOR/F eol=; tokens=1-14 delims=_ %g in (%1)docall:fnDoClearDir%1 %g %h %i %j %k %l %m %n %o %p %q %r %s %t %u %v %w %x %y %z49goto:EOF5051:fnDoClearDir52rem arg: dir_name dir_parts 53set d_name=%154rem 检查参数是否匹配 %winver%, 先跳过前两个.同时准备组合新版本匹配名称,nv1存当前版本,nv2存当前的前一个版本55set nv1=%2_%3_56set nv2=%2_%3_57:ldcdCycle58if%4=goto:EOF59rem 检查是否 ver_prefix 开头,如果是则继续检查是否winver,如果不是winver则表示目标存在60set arg=%461rem set line=set end4=%arg:%ver_prefix%=%62rem %line%63goto ldcdStat164:ldcdStat265if%arg%=%end4%goto ldcdNext66rem 检查是否 winver 开头67rem set line=set end4a=%arg:%winver%=%68rem %line%69goto ldcdStat370:ldcdStat471ifnot%arg%=%end4a%goto:EOF72rem 至此则为 ver_prefix 开头 且 不等于 winver 的目录名,检查最新版本是否存在,存在则可删除旧的73set newfound=false74for/d %v in (%SystemRoot%winsxs%nv1%winver%.*_%5_*)do(75 ifexist %vnul set newfound=true76) 77if%newfound%=truecall:fnDelDir %d_name%7879goto:EOF80:ldcdNext81set nv2=%nv1%82set nv1=%nv2%4_83shift84goto ldcdCycle8586:fnDelDir87rem arg: dir88echodel %SystemRoot%winsxs%189takeown /r /f %SystemRoot%winsxs%190cacls %SystemRoot%winsxs%1/t /e /g everyone:f91move%SystemRoot%winsxs%1%move_dir%192goto:EOF9394代码导读有助于大家理解程序和算法,但是基本的批处理语法就不讲了,有几年编程经验的我想也看得懂。以下是大致几个要注意的地方:1. 代码的开头部分是用ver命令获取系统的版本号,并且存放到%winver%变量中,比如我的ver命令返回就是“Microsoft Windows 版本 6.0.6002”,为了获取这个“6.0.6002”,所以要做一些处理,另外,%ver_prefix%中存放的是类似“6.0.600”,为了比较旧版本号用途。 2. 因为批处理无法实现嵌套嵌入功能,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论