win7 winsxs精简 cmd 脚本之 再次 改进版
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
title 清理WIN7 WINSXS重复文件 ver.5.3
COLOR 0A
set startT=%TIME%
set move_dir=%SystemRoot%\winsxs_del
set df=0&& set df1=0&& set nf=0
if not exist %move_dir%\nul md %move_dir%
set log=%temp%\winsxs-clear.log
pushd "%SystemRoot%\winsxs"
echo ===================== Start... %startT% ============================ >> "%log%"
FOR /F "delims=" %%a in ('dir /ad /b /o-n %SystemRoot%\winsxs\*.*') do (
set /a nf+=1
if exist "%SystemRoot%\winsxs\%%a" call:fnDoClear "%%a"
)
echo ===================== OK... %DATE% %TIME% (%df1%/%df%/%nf%)================= >> "%log%"
echo 清理完毕. %startT% - %TIME%. %log%.
echo 文件已经被移至 %move_dir%. (%df1%/%df%/%nf%)
for %%c in (startt move_dir log df df1 nf) do set %%c=
popd
pause>nul
goto :EOF
:fnDoClear
call:fnSplitName %1
if not "%f_name%"=="" call:fnDoClearDir %1 !f_type! !f_name! !f_id! !f_rev! !f_lang! !f_sign!
goto :EOF
:fnSplitName
for %%c in (f_type f_name f_id f_rev f_lang f_sign) do set %%c=
SET L=%~1
SET /A M=0
:LOOP1
SET L2=%L:~-1,1%
SET L=%L:~0,-1%
IF "%L2%"=="_" (
SET /A M+=1
IF "%M%"=="3" (
FOR /F "delims=_ tokens=1*" %%C IN ("%L%") DO (
SET f_name=%%D
set f_type=%%C)
set f_id=%l1%)
if "%m%"=="0" set f_sign=%l1%
if "%m%"=="1" set f_lang=%l1%
if "%m%"=="2" set f_rev=%l1%
set l1=
) else ( set l1=%L2%%l1%)
IF "%L%"=="" GOTO END1
GOTO LOOP1
:END1
for %%c in (l l1 l2) do set %%c=
if %m% lss 5 set f_name=
goto :EOF
:fnDoClearDir
call:fnStdVer %5
set curorgver=%5
set curver=%R_STDVER%
set cursign=%7
set R_STDVER=
set newver=
set neworgver=
set newsign=
FOR /F "delims=" %%a in ('dir /ad /o-n /b %2_%3_%4_*_%6_*') do (
call:fnSplitName %%a
if not "%f_name%"=="" call:fnCompVer "!newver!" !f_rev! !f_sign!
)
if "%newver%"=="" goto :EOF
echo ------%nf%# !f_type! !f_name! !neworgver! !newsign! ---
echo ------%nf%# !f_type! !f_name! !neworgver! !newsign! --->>"%log%"
FOR /F "delims=" %%a in ('dir /ad /o-n /b %2_%3_%4_*_%6_*') do (
call:fnSplitName %%a
if not "!f_name!"=="" (
if "!neworgver!"=="!f_rev!" (
if "!newsign!"=="!f_sign!" (
echo 保留 %%a
echo 保留 %%a >> "%log%"
) else ( call:fnDelDir "%%a")
) else ( call:fnDelDir "%%a")
)
)
echo ============================================================================
echo ============================================================================>>"%log%"
goto :EOF
:fnCompVer
set V1=%~1
call:fnStdVer %2
set V2=%R_STDVER%
set R_STDVER=
if "%~1"=="" set neworgver=%2&&set newver=%V2%&&set newsign=%3&& goto :EOF
if /I "%V1%" LSS "%V2%" set neworgver=%2&&set newver=%V2%&&set newsign=%3&& goto :EOF
goto :EOF
:fnStdVer
FOR /F "eol=; tokens=1-10 delims=." %%v in ("%~1") do call:fnStdVerImpl %%v %%w %%x %%y %%z
goto :EOF
:fnStdVerImpl
set svi_1=0000000000%1
set svi_2=0000000000%2
set svi_3=0000000000%3
set svi_4=0000000000%4
set svi_5=0000000000%5
set svi_6=0000000000%6
set R_STDVER=%svi_1:~-10%.%svi_2:~-10%.%svi_3:~-10%.%svi_4:~-10%.%svi_5:~-10%.%svi_6:~-10%
goto :EOF
:fnDelDir
set /a df+=1
takeown /r /f "%SystemRoot%\winsxs\%~1" >nul 2>nul
cacls "%SystemRoot%\winsxs\%~1" /t /e /g everyone:f >nul 2>nul
move "%SystemRoot%\winsxs\%~1" "%move_dir%\%~1" >nul 2>nul
if not ERRORLEVEL 1 (
echo ...%df%# 成功移除 %1
echo ...%df%# 成功移除 %1>> "%log%"
set /a df1+=1
) else (
echo ...%df%# 未能移除 %1
echo ...%df%# 未能移除 %1>> "%log%"
)
goto :EOF
主要 改进 :
1、用 dir /ad /b /o-n 代替 dir /ad /o-n 可以节省 判断 <DIR>
的语句条目
2、改进 名称 split 段 内容,适合 更多情况
3、改进 删除文件 的 条件判断 ,使其 更合理。
当确定
一个文件的 文件名 版本 签名 以后 , 原有 判断条件 是版本+签名同时与 要保留的 文件 不同的时候 才 删除。
改进为 版本 或 签名
其一不同就 删掉。
4、增加 项目计数
另外 原版本中如下语句不明 何意
set mxms=a
if not
"!mxms!" == "a" set mxms=&&%comspec% /V:ON /C % %* && goto :EOF
set mxms=
win7 winsxs精简 cmd 脚本之 再次 改进版的更多相关文章
- Win7全自动精简批处理_温柔处理极速修正版/暴力剩女工程测试版
2011htpcfans 发表于 2012-5-11 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=210269&highligh ...
- Android Win7 上使用cmd生成Jks
Android Win7 上使用cmd生成Jks cmd 命令 C:\Program Files\Java\jre1.8.0_111\bin>keytool -genkeypair -alias ...
- 怎样用cmd脚本添加Qt的环境变量
在网上遍历了很久,终于找到了一个简单且令人满意的答案: 定位到PyQt5发布文件所需的plugins的位置: 新建一个名为“设置环境变量”的cmd脚本,在里面写上: wmic ENVIRONMENT ...
- win7系统的CMD窗口切换目录--小计
经常使用win7系统的CMD窗口,需要切换到工作目录,方法如下: 1. Win + R 2. 在命令行输入 cmd 出现如下: C:\Users\admin> 3. 在以上输入 D: (表示切换 ...
- [原创] Win7全自动精简批处理_绝对原创,绝对给力_感谢无忧给了我一年的潜水
2011htpcfans发表于 2012-5-5 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=210043 @echo 全自动/手动精简 ...
- 工程师倾情奉献-Win7 ISO 精简操作说明
1.前提条件 a)本文档内容只适用于32bit win7 install ISO,其它OS不能保证兼容 b)示范文件为win7-ultimate-rtm-32-en-us-rdvd.iso 2.准备待 ...
- 卸载系统自带的JDK的脚本并再次安装
卸载系统自带的JDK的脚本并安装1.6.0.32版本的jdk #!/bin/bash homefile=/usr/local/java cd $homefile homelist=`sudo rpm ...
- C#调用cmd 脚本实例
1.实例1 public static void TestOne() { Process p = new Process(); p.StartInfo.FileName = "cmd.exe ...
- win7自由调整CMD窗口
有如下命令,只需要改动相关参数即可以任意改变cmd窗口大小. mode con lines= mode con cols= color cls @cmd
随机推荐
- git 常用命令粗略总结
本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!原文地址:http://www.cnblogs.com/cxun/p/5630190.html git的功能很强大,但是其实很简单,用来用去 ...
- 卸载Centos自带open-jdk
1.rpm查看安装文件 rpm -qa|grep java 2,切换到root用户,卸载 rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.75-2. ...
- ASP.NET MVC 异步获取和刷新ExtJS6 TreeStore
从数据库获取构造树结构是ExtJS TreePanel的核心技术,常用方法是TreeStroe里配置proxy,这种方式的root成了一个不受控制的节点. TreeStroe的root实际是一个层叠j ...
- netty 解决TCP粘包与拆包问题(二)
TCP以流的方式进行数据传输,上层应用协议为了对消息的区分,采用了以下几种方法. 1.消息固定长度 2.第一篇讲的回车换行符形式 3.以特殊字符作为消息结束符的形式 4.通过消息头中定义长度字段来标识 ...
- 使用js倒计时还有几天及计时过了几天
公司主营业务是体育赛事为主的:尤其是足球赛事.现正值2016法国欧洲杯:之前忙于做欧洲杯专题没时间总结.现分享一个工作中需求带来的经历. 需求是:从现在开始倒计时欧洲杯还有多久开赛:当开赛之后开始计算 ...
- 基于Session的国际化实现
如何将我们网站的其它内容(如菜单.标题等)做国际化处理呢?这就是本篇要将的内容—>国际化. 在项目的spring.xml文件添加的内容如下 <mvc:interceptors> &l ...
- YTU 3026: 中序线索化二叉树
原文链接:https://www.dreamwings.cn/ytu3026/2896.html 3026: 中序线索化二叉树 时间限制: 1 Sec 内存限制: 128 MB 提交: 9 解决: ...
- 创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法)。
创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法). ackage com.chuoji.text01; pub ...
- bzoj1080
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1080 神暴力,待搞懂. 代码 #include <cstdio> #includ ...
- er3
<html xmlns:v="urn:schemas-microsoft-com:vml"xmlns:o="urn:schemas-microsoft-com:of ...