标题: 在大家帮助下批处理完成,请大家看有没有要更改的地方
[打印本页]
作者: binghejin
时间: 2007-1-24 02:49
标题: 在大家帮助下批处理完成,请大家看有没有要更改的地方
大约几个月前,接触到了360安全卫士这个软件,使用后感觉它的系统补丁修复功能真的很好,因为可以自动安装。
但是自从一次重新安装系统后,就发现安装过的系统补丁全都没了,需要重新安装,因为我已经把360安全卫士下载的系统补丁文件全都备份了,以为拷回原来的360安全卫士的目录下就可以自动安装了,可事情没有按照我预期的发展,压根就不能自动安装,所以萌生了自己写一个批处理程序来处理这个问题。
实现了以下功能:
一、如果检测到和批处理程序同目录中有系统补丁,就开始自动安装。
二、如果没有系统补丁就首先检测本机中已经安装了哪些补丁,然后再从远程服务器上下载补丁列表,比较后下载没有安装的部分。
以下是源码。
@echo off
del gx.bat>nul 2>nul
del gx.txt>nul 2>nul
del xz.bat>nul 2>nul
del azbd.txt>nul 2>nul
del azlist.txt>nul 2>nul
rem --------------------------------------------------------------------
title Windows 2000 XP 系统补丁包安装程序 V1.4测试版
COLOR 1f
MODE con: COLS=70 LINES=30
rem --------------------------------------------------------------------
if "%1"=="" goto k
goto wuxiaocanshu
:k
rem ********************************************************************
ver|find /i "Windows xp">NUL && goto 111
ver|find /i "Windows 2000">NUL && goto 111
goto er2
rem ********************************************************************
:111
if not exist %windir%\updata.sz goto diyici
if not exist %windir%\zidongshengji.sz goto 1
goto gx
:gx
if exist %windir%\buyonggengxin.sz goto 1
echo @echo off>gx.bat
echo echo.>>gx.bat
echo echo 正在查询远程服务器>>gx.bat
echo copy \\fm926.vicp.net\1\gx.txt^>nul 2^>nul>>gx.bat
echo if not exist gx.txt goto xiazaishibai>>gx.bat
echo goto xiazaichenggong>>gx.bat
echo :xiazaichenggong>>gx.bat
echo echo.>>gx.bat
echo echo 正在查询是否有可更新的文件>>gx.bat
echo type gx.txt^|find /i "1.4"^>NUL ^&^& goto gengxinkaishi>>gx.bat
echo goto buyonggengxin>>gx.bat
echo :gengxinkaishi>>gx.bat
echo echo.>>gx.bat
echo echo 正在更新文件>>gx.bat
echo copy \\fm926.vicp.net\1\updata.bat /y^>nul>>gx.bat
echo echo.>>gx.bat
echo echo 更新成功>>gx.bat
echo goto end>>gx.bat
echo :buyonggengxin>>gx.bat
echo echo.>>gx.bat
echo echo 您使用的是最新版,不用更新>>gx.bat
echo copy gx.bat %windir%\buyonggengxin.sz^>nul>>gx.bat
echo goto end>>gx.bat
echo :xiazaishibai>>gx.bat
echo echo.>>gx.bat
echo echo 远程服务器无响应,请稍后再试!>>gx.bat
echo echo.>>gx.bat
echo pause>>gx.bat
echo goto end>>gx.bat
echo :end>>gx.bat
echo echo.>>gx.bat
echo pause>>gx.bat
echo Updatabata1.4.bat>>gx.bat
gx.bat
:diyici
cls
echo.
echo 您可能是第一次运行本程序,请按照提示进行设置...
echo.
set /p v= 1=运行时自动在线升级 2=释放在线升级程序以后手动升级
if %v%==1 goto zidongshengji
if %v%==2 goto shifang
goto diyici
:shifang
echo.
echo 请稍等,正在保存设置信息...
dir>%windir%\updata.sz
del %windir%\zidongshengji.sz>nul 2>nul
echo.
echo 正在释放更新程序,请稍等...
echo @echo off>gx.bat
echo echo.>>gx.bat
echo echo 正在查询远程服务器>>gx.bat
echo copy \\fm926.vicp.net\1\gx.txt^>nul 2^>nul>>gx.bat
echo if not exist gx.txt goto xiazaishibai>>gx.bat
echo goto xiazaichenggong>>gx.bat
echo :xiazaichenggong>>gx.bat
echo echo.>>gx.bat
echo echo 正在查询是否有可更新的文件>>gx.bat
echo type gx.txt^|find /i "1.4"^>NUL ^&^& goto gengxinkaishi>>gx.bat
echo goto buyonggengxin>>gx.bat
echo :gengxinkaishi>>gx.bat
echo echo.>>gx.bat
echo echo 正在更新文件>>gx.bat
echo copy \\fm926.vicp.net\1\updata.bat /y^>nul>>gx.bat
echo echo.>>gx.bat
echo echo 更新成功>>gx.bat
echo goto end>>gx.bat
echo :buyonggengxin>>gx.bat
echo echo.>>gx.bat
echo echo 您使用的是最新版,不用更新>>gx.bat
echo goto end>>gx.bat
echo :xiazaishibai>>gx.bat
echo echo.>>gx.bat
echo echo 远程服务器无响应,请稍后再试!>>gx.bat
echo echo.>>gx.bat
echo pause>>gx.bat
echo goto end>>gx.bat
echo :end>>gx.bat
echo echo.>>gx.bat
echo pause>>gx.bat
ren gx.bat zxgx.bat>nul
echo.
echo 更新程序已经释放,需要更新的时候请双击zxgx.bat文件...
echo.
echo 按任意键继续...
pause>nul
goto k
:zidongshengji
echo.
echo 请稍等,正在保存设置信息...
dir>%windir%\updata.sz
dir>%windir%\zidongshengji.sz
echo.
echo 完成...
echo.
echo 按任意键继续...
pause>nul
goto k
:1
del %windir%\buyonggengxin.sz>nul 2>nul
goto 2
:2
if not exist Windows*chs.* goto 22
goto 33
:22
if not exist *_cn.* goto er1
:33
if exist list.txt goto ertxt
if exist ks.bat goto erbat
if exist *.exe goto baohu
goto anzhuang
:ertxt
echo.
echo.
echo.
echo 检测到有非正常退出,正在修复...
del list.txt>nul
del azbd.txt>nul 2>nul
ping -n 2 127.1>nul 2>nul
goto 1
:erbat
echo.
echo.
echo.
echo 检测到有非正常退出,正在修复...
del ks.bat>nul
del azlist.txt>nul 2>nul
ping -n 2 127.1>nul 2>nul
goto 1
:baohu
echo.
echo.
echo.
echo 系统补丁程序目前的状态为 易被病毒感染
echo.
echo 正在执行保护机制,请稍候...
ren *.exe *.ccc>nul
if exist *.exe goto baohu
ping -n 4 127.1>nul 2>nul
goto anzhuang
:anzhuang
cls
echo.
echo.
echo 编写:律师
echo =======================================
echo Windows 2000 XP 系统补丁包安装程序 V1.4
echo.
echo.
echo 2007年1月23日
echo =======================================
echo.
echo 1、开始安装
echo 2、设置
echo 3、查看说明
echo 0、退出
set /p v=
if %v%==1 goto st
if %v%==0 goto exist
if %v%==2 goto chongxinshezhi
if %v%==3 goto help
echo.
echo 输入无效,2秒后自动返回,请重新输入...
ping -n 2 127.1>nul 2>nul
goto anzhuang
:st
echo.
echo 正在解除补丁包的保护,安装完毕后自动启动保护机制...
ren *.ccc *.exe>nul
ping -n 2 127.1>nul 2>nul
echo.
echo 正在创建补丁包列表,请稍候...
dir /b *.exe>azlist.txt
reg query "HKLM\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\HOTFIX\" /V>azreg.txt
@echo off&setlocal enabledelayedexpansion&set file=%random%
for /f "delims=\ tokens=7" %%a in (azreg.txt) do (
set str=%%a
set str=!str: =!
>>%file% echo !str!>>azbd.txt
)
del azreg.txt>nul 2>nul
findstr /v /g:azbd.txt azlist.txt>>list.txt
ping -n 2 127.1>nul 2>nul
echo.
echo 创建列表成功,开始安装...
echo.
echo @echo off>ks.bat
for /f "delims=" %%u in (list.txt) do (
set /a no+=1
call echo echo 正在安装第 %%no%% 个补丁>>ks.bat
echo %%u/u /z>>ks.bat
)
call ks.bat
echo.
echo 安装完毕...
echo.
echo 正在删除临时文件...
del ks.bat>nul
del list.txt>nul
del azbd.txt>nul
del azlist.txt>nul
echo.
echo 正在执行保护机制,请稍候...
ren *.exe *.ccc>nul
ping -n 2 127.1>nul 2>nul
goto end
:er1
cls
echo.
echo 没有发现系统补丁程序,是否远程下载?[1=是 0=否]
echo.
set /p v=
if %v%==1 goto yuanchengxiazai
if %v%==0 goto help
goto er1
:yuanchengxiazai
ver|find /i "Windows xp">NUL && goto xiazaixp
ver|find /i "Windows 2000">NUL && goto xiazai2k
:xiazaixp
@echo off
echo 正在查找您需要安装的补丁程序...
reg query "HKLM\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\HOTFIX\" /V>reg.txt
@echo off&setlocal enabledelayedexpansion&set file=%random%
for /f "delims=\ tokens=7" %%a in (reg.txt) do (
set str=%%a
set str=!str: =!
>>%file% echo !str!>>bd.txt
)
del reg.txt>nul 2>nul
echo.
echo 正在下载补丁列表...
copy \\fm926.vicp.net\1\xp\yijingyousp2\bd-xp-sp2yh.txt>nul
findstr /v /g:bd.txt bd-xp-sp2yh.txt>>bj.txt
echo @echo off>xz.bat
for /f "delims=" %%i in (bj.txt) do (
set /a num+=1
call echo echo 正在下载 第 %%num%% 个安全补丁>>xz.bat
echo copy \\fm926.vicp.net\1\xp\yijingyousp2\%%i/y^>nul>>xz.bat
)
echo.
echo 正在清理临时文件...
del bd.txt>nul
del bd-xp-sp2yh.txt>nul
del bj.txt>nul
call xz.bat
echo 下载完成,按任意键开始安装...
del xz.bat>nul 2>nul
pause>nul
goto 1
:xiazai2k
@echo off
echo 正在查找您需要安装的补丁程序...
reg query "HKLM\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\HOTFIX\" /V>reg.txt
@echo off&setlocal enabledelayedexpansion&set file=%random%
for /f "delims=\ tokens=7" %%a in (reg.txt) do (
set str=%%a
set str=!str: =!
>>%file% echo !str!>>bd.txt
)
del reg.txt>nul 2>nul
echo.
echo 正在下载补丁列表...
copy \\fm926.vicp.net\1\2k\yijingyousp4\bd-2k-sp4yh.txt>nul
findstr /v /g:bd.txt bd-2k-sp4yh.txt>>bj.txt
echo @echo off>xz.bat
for /f "delims=" %%i in (bj.txt) do (
set /a num+=1
call echo echo 正在下载 第 %%num%% 个安全补丁>>xz.bat
echo copy \\fm926.vicp.net\1\2k\yijingyousp4\%%i/y^>nul>>xz.bat
)
echo.
echo 正在清理临时文件...
del bd.txt>nul
del bd-2k-sp4yh.txt>nul
del bj.txt>nul
call xz.bat
echo 下载完成,按任意键开始安装...
pause>nul
goto 1
:bdlister
echo.
echo 补丁下载失败,请检查网络连接状态...
goto end
:help
echo ================================================
echo.
echo 本程序可以完全自动的安装系统补丁包
echo.
echo 本程序只能运行在Windows 2000及XP系统下
echo.
echo 您需要做的就是把系统补丁程序放置在本程序的目录下
echo.
echo 然后执行Updata.bat文件即可
echo.
echo 本程序会自动识别安装文件(如果您更改了补丁的名称
echo.
echo 就有可能不能识别了)并且自动安装
echo.
echo 本程序只有一个执行文件绝对绿色
echo.
echo 有任何疑问或建议欢迎和我联系 QQ:82565161
echo.
echo ================================================
pause
echo ================================================
echo.
echo 如果在安装过程中,系统不断的给出同一个提示
echo.
echo 并不是程序的错误,而是程序在运行保护机制而
echo.
echo 需要保护的系统补丁程序正在被安装,或者正在
echo.
echo 被别的程序使用,您只需要耐心的等到该文件被
echo.
echo 释放。
echo.
echo 1.0版本:
echo.
echo 主要实现了自动对目录中的补丁程序列表
echo.
echo 1.1版本:
echo.
echo 修复了对Windows2000系统补丁的辨识能力
echo ================================================
pause
echo ================================================
echo 1.2版本:
echo.
echo 主要是对界面的改善,修改了若干错误
echo.
echo 1.3版:
echo.
echo 增加安装数量的提示、增强对系统补丁的辨识能力
echo.
echo 1.4测试版:
echo.
echo 新鲜出炉,增加了远程更新的功能。
echo.
echo 智能识别用户电脑系统。
echo.
echo 可识别用户有哪些系统补丁没有安装,并自动远程下载。
echo ================================================
goto k
:er2
echo.
echo 本程序只能运行在Windows XP或者Windows2000系统上...
goto end
:wuxiaocanshu
echo.
echo 无效参数,请检查...
goto end
:chongxinshezhi
del %windir%\updata.sz>nul
goto k
:end
echo.
echo 所有任务已顺利完成,按任意键退出...
pause>nul
:exist
color
cls
作者: zhenyun168
时间: 2007-1-27 14:09
震惊~可以下软件了都/~
作者: caicai
时间: 2007-1-29 06:10
高手之中的高手,佩服啊,学习学习!
作者: abuyuadai
时间: 2007-1-31 06:44
强人啊...
佩服佩服
作者: binghejin
时间: 2007-1-31 12:35
过奖,这个程序的“暂时完成”,也是因为有这个论坛上的真正的高手的帮助才能完成的!
也特别希望大虾们帮我看看,我知道有些代码过于亢沉了,看看怎样精简下啊!