中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 在大家帮助下批处理完成,请大家看有没有要更改的地方
作者:
标题: 在大家帮助下批处理完成,请大家看有没有要更改的地方 上一主题 | 下一主题
binghejin
初级用户





积分 48
发帖 19
注册 2006-12-27
状态 离线
『楼 主』:  在大家帮助下批处理完成,请大家看有没有要更改的地方

  大约几个月前,接触到了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

2007-1-24 02:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhenyun168
初级用户





积分 24
发帖 13
注册 2007-1-27
状态 离线
『第 2 楼』:  

震惊~可以下软件了都/~

2007-1-27 14:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
caicai
新手上路





积分 14
发帖 7
注册 2006-9-20
状态 离线
『第 3 楼』:  

高手之中的高手,佩服啊,学习学习!

2007-1-29 06:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abuyuadai
新手上路





积分 2
发帖 1
注册 2007-1-25
状态 离线
『第 4 楼』:  

强人啊...
佩服佩服

2007-1-31 06:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
binghejin
初级用户





积分 48
发帖 19
注册 2006-12-27
状态 离线
『第 5 楼』:  

过奖,这个程序的“暂时完成”,也是因为有这个论坛上的真正的高手的帮助才能完成的!

也特别希望大虾们帮我看看,我知道有些代码过于亢沉了,看看怎样精简下啊!

2007-1-31 12:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: