中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已完成]批量更新系统update补丁的批处理
作者:
标题: [已完成]批量更新系统update补丁的批处理 取消高亮 | 上一主题 | 下一主题
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『楼 主』:  [已完成]批量更新系统update补丁的批处理


@echo off
setlocal
echo.>list.txt
echo.>list.bat
for /f "tokens=2 delims=: " %%i in ('systeminfo ^|findstr /c:"KB"')do echo.%%i>>list.txt
if not exist qchain.exe (start http://php.tech.sina.com.cn/download/d_load.php?d_id=34472^&down_id=135329
                        echo 下载完成后解压出qchain.exe,和本程序放在同一目录下!)
for /f "delims= " %%i in ('dir /b *-chs.exe') do (for /f "delims= " %%j in (list.txt) do (findstr /i "%%j" %%i>nul && echo.||echo.%%i /z /q>>list.bat))


echo qchain >> list.bat
pause
我的目的是想首先检查系统已经打了哪些补丁,然后在生成批处理时不要将这些加进去。但是没有达到预期目的。



实现了批量安装以及避免重复安装的问题。目前已知问题:1搜索已安装补丁时的信息没能去掉;2对于使用msi安装的补丁,没有解决。完成代码如下:
1完全是自己写的。缺点就是如果有相同内容会显示很多空行,2是参考lxmxn写的。
@echo off
cd.>list.txt
cd.>list.bat
for /f "tokens=2 delims=: " %%i in ('systeminfo ^|findstr /c:"KB"')do echo 系统已经安装的补丁有:%%i&echo.%%i>>list.txt
if not exist qchain.exe (echo 缺少文件,程序将自动下载。下载完成后解压出qchain.exe,和本程序放在同一目录下!
                        start http://php.tech.sina.com.cn/download/d_load.php?d_id=34472^&down_id=135329)
for /f "tokens=1,2* delims=- " %%i in ('dir /b windows*-chs.exe') do (findstr /i "%%j" list.txt>nul &&echo.||echo %%i-%%j-%%k /z /q>>list.bat)
echo qchain >> list.bat
cls
echo 正在安装补丁,请稍候!!!!!
list
del /q list.bat
echo 恭喜,安装完成! 系统将自动退出!
ping -n 2 127.1 >nul&exit

@echo off
setlocal
cd.>list.txt
cd.>list.bat
for /f "tokens=2 delims=: " %%i in ('systeminfo ^|findstr /c:"KB"')do echo 系统已经安装的补丁有:%%i&echo.%%i>>list.txt
if not exist qchain.exe (echo 缺少文件,程序将自动下载。下载完成后解压出qchain.exe,和本程序放在同一目录下!
                        start http://php.tech.sina.com.cn/download/d_load.php?d_id=34472^&down_id=135329)
dir /b windows*-chs.exe | findstr /v /g:list.txt >new.bat
for /f %%i in (new.bat) do echo %%i /z /q >>list.bat
del /q new.bat
echo qchain >> list.bat
cls
echo 正在安装补丁,请稍候!!!!!
list
del /q list.bat
echo 恭喜,安装完成! 系统将自动退出!
ping -n 2 127.1 >nul&exit
[ Last edited by yardian on 2006-12-27 at 05:29 AM ]

2006-12-27 01:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『第 2 楼』:  

可能我上在的表达不够清楚,竟然没人帮忙。我再重新说一下:
有这样两个文件:
list.txt
KB867460
KB837272
KB889101
KB911927
KB917344
KB918439
KB920213
KB923414
KB925454

list.bat
WindowsServer2003-KB889101-SP1-x86-CHS.exe /z /q
WindowsServer2003-KB925454-x86-CHS.exe /z /q
WindowsServer2003-KB911927-x86-CHS.exe /z /q
WindowsServer2003-KB917344-x86-CHS.exe /z /q
WindowsServer2003-KB918439-x86-CHS.exe /z /q
WindowsServer2003-KB920213-x86-CHS.exe /z /q
WindowsServer2003-KB923414-x86-CHS.exe /z /q
msxml4-KB927978-chs.exe /z /q
WindowsServer2003-KB923694-x86-CHS.exe /z /q
WindowsServer2003-KB917537-x86-CHS.exe /z /q
WindowsServer2003-KB923980-x86-CHS.exe /z /q
WindowsServer2003-KB917953-x86-CHS.exe /z /q
WindowsServer2003-KB923191-x86-CHS.exe /z /q
WindowsServer2003-KB917422-x86-CHS.exe /z /q
WindowsServer2003-KB899591-x86-CHS.exe /z /q
WindowsServer2003-KB924191-x86-CHS.exe /z /q
WindowsServer2003-KB900725-x86-CHS.exe /z /q
WindowsServer2003-KB914389-x86-CHS.exe /z /q
WindowsServer2003-KB908981-x86-CHS.exe /z /q
WindowsServer2003-KB912919-x86-CHS.exe /z /q
WindowsServer2003-KB920670-x86-CHS.exe /z /q
WindowsServer2003-KB899589-x86-CHS.exe /z /q
WindowsServer2003-KB914388-x86-CHS.exe /z /q
WindowsServer2003-KB921883-v2-x86-CHS.exe /z /q
WindowsServer2003-KB920685-x86-CHS.exe /z /q
WindowsServer2003-KB901190-x86-CHS.exe /z /q
WindowsServer2003-KB912818-v3-x86-CHS.exe /z /q
WindowsServer2003-KB899588-x86-CHS.exe /z /q
WindowsServer2003-KB922582-x86-CHS.exe /z /q
WindowsServer2003-KB901214-x86-CHS.exe /z /q
WindowsServer2003-KB893756-x86-CHS.exe /z /q
WindowsServer2003-KB925486-x86-CHS.exe /z /q
WindowsServer2003-KB908531-v2-x86-CHS.exe /z /q
WindowsServer2003-KB899587-x86-CHS.exe /z /q
WindowsServer2003-KB923689-x86-CHS.exe /z /q
WindowsServer2003-KB896428-x86-chs.exe /z /q
WindowsServer2003-KB898715-x86-chs.exe /z /q
WindowsServer2003-KB922616-x86-CHS.exe /z /q
WindowsMedia-KB911564-x86-CHS.exe /z /q
WindowsServer2003-KB926247-x86-CHS.exe /z /q
WindowsServer2003-KB922819-x86-CHS.exe /z /q
WindowsServer2003-KB904706-v2-x86-CHS.exe /z /q
WindowsServer2003-KB929120-x86-CHS.exe /z /q
WindowsServer2003-KB920683-x86-CHS.exe /z /q
WindowsServer2003-KB921398-x86-CHS.exe /z /q
WindowsServer2003-KB911280-v2-x86-CHS.exe /z /q
WindowsServer2003-KB928388-x86-CHS.exe /z /q
WindowsServer2003-KB908519-x86-CHS.exe /z /q
WindowsServer2003-KB896358-x86-chs.exe /z /q
WindowsServer2003-KB911562-x86-CHS.exe /z /q
WindowsServer2003-KB905414-x86-CHS.exe /z /q
WindowsServer2003-KB910437-x86-CHS.exe /z /q
WindowsServer2003-KB917734-x86-CHS.exe /z /q
WindowsServer2003-KB901017-x86-CHS.exe /z /q
WindowsServer2003-KB896424-x86-CHS.exe /z /q
Windows-KB909520-v1.000-x86-CHS.exe /z /q
现在如何实现如果list.bat包含list.txt中的字符串,则将该行删除。

2006-12-27 03:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『第 3 楼』:  

晕,不是吧。还没人能明白我的意思?

2006-12-27 03:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  


findstr /v /g:list.txt list.bat >new_list.bat


2006-12-27 03:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『第 5 楼』:  

呵呵,到底是高手。不一样啊。我想了半天才想出来一种方法。
for /f "tokens=1,2* delims=- " %%i in (list.bat) do (findstr /i "%%j" list.txt>nul &&echo.||echo %%i-%%j-%%k>>list1.bat)

2006-12-27 04:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kafen
初级用户





积分 97
发帖 43
注册 2005-7-25
状态 离线
『第 6 楼』:  

这个不错,可楼主,我还是看不明白,你主题上的已完成是什么意思?你所说的问题都解决了吗?
还有下载的qchain.exe是win2K_sp1?

[ Last edited by kafen on 2006-12-27 at 09:37 AM ]

2006-12-27 09:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ronin
中级用户




积分 421
发帖 111
注册 2003-8-29
状态 离线
『第 7 楼』:  

这个是用list.txt来确认是否安装过的补丁吗,这样那个不好,要检测系统是否安装好了补丁才行,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix里面有纪录,应该是将这个已经安装的列表出来对比才行

2007-1-9 02:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dikex
高级用户

潜水修练批处理



积分 788
发帖 366
注册 2006-12-31
状态 离线
『第 8 楼』:  



  Quote:
@echo off
del list.log /q
cls
echo 正在检测已经的安装补丁
for /f "delims=- tokens=2" %%i in ('dir *-kb*.exe /b /on') do REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\%%i" >nul || dir /b *%%i*.exe >>list.log && cls && echo 正在检测已经的安装补丁
cls
for /f "eol=o eol=O " %%j in (list.log) do echo 正在安装补丁%%j  && %%j /passive /norestart
cls
echo 安装了的补丁列表(list.log):& type list.log | more
pause

我前段时间写的,看看吧
不过有些补丁是特殊的,如msxml4-KB927978-chs.exe是不会在HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix里面记录的,而flash的那个补丁使用的安装包的形式不同,需要使用其他的参数,懒得写,弄个IF来判断就可以了

[ Last edited by dikex on 2007-1-8 at 01:51 PM ]

2007-1-9 02:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 9 楼』:  

qchain.exe

这个文件是???

2007-1-9 02:42
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
ronin
中级用户




积分 421
发帖 111
注册 2003-8-29
状态 离线
『第 10 楼』:  

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\MSXML4SP2\Q927978
msxml4-KB927978-chs.exe在这里有记录

2007-1-12 02:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 11 楼』:  


  systeminfo里面貌似也有一点系统补丁的信息。


2007-1-12 02:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dikex
高级用户

潜水修练批处理



积分 788
发帖 366
注册 2006-12-31
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by ronin at 2007-1-11 01:09 PM:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\MSXML4SP2\Q927978
msxml4-KB927978-chs.exe在这里有记录

呵呵,查找是输入了KB927978,所以找不到了

另外也比较齐全的是在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates里面,所有的都看到了,不过比较分散,可以先导出再使用find来查找对照,但由于项目太多而比较慢,而使用下面这个可以导出范围比较小的列表
for /f "delims=" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates" /s ^| findstr /i "kb......$ q......$"') do echo %%i >>list.log

2007-1-12 02:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: