中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-15 12:53
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行
DOS批处理 & 脚本技术(批处理室) » [已完成]批量更新系统update补丁的批处理
可打印版本  4,406 / 11
第1楼 yardian 发表于 2006-12-27 01:20
中级用户 发帖 85 积分 305
[已完成]批量更新系统update补丁的批处理


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



实现了批量安装以及避免重复安装的问题。目前已知问题:1搜索已安装补丁时的信息没能去掉;2对于使用msi安装的补丁,没有解决。完成代码如下:
1完全是自己写的。缺点就是如果有相同内容会显示很多空行,2是参考lxmxn写的。





[ Last edited by yardian on 2006-12-27 at 05:29 AM ]
第2楼 yardian 发表于 2006-12-27 03:04
中级用户 发帖 85 积分 305
可能我上在的表达不够清楚,竟然没人帮忙。我再重新说一下:
有这样两个文件:
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中的字符串,则将该行删除。
第3楼 yardian 发表于 2006-12-27 03:23
中级用户 发帖 85 积分 305
晕,不是吧。还没人能明白我的意思?
第4楼 lxmxn 发表于 2006-12-27 03:54
版主 发帖 4,938 积分 11,386

第5楼 yardian 发表于 2006-12-27 04:02
中级用户 发帖 85 积分 305
呵呵,到底是高手。不一样啊。我想了半天才想出来一种方法。
for /f "tokens=1,2* delims=- " %%i in (list.bat) do (findstr /i "%%j" list.txt>nul &&echo.||echo %%i-%%j-%%k>>list1.bat)
第6楼 kafen 发表于 2006-12-27 09:34
初级用户 发帖 43 积分 97
这个不错,可楼主,我还是看不明白,你主题上的已完成是什么意思?你所说的问题都解决了吗?
还有下载的qchain.exe是win2K_sp1?

[ Last edited by kafen on 2006-12-27 at 09:37 AM ]
第7楼 ronin 发表于 2007-01-09 02:29
中级用户 发帖 111 积分 421
这个是用list.txt来确认是否安装过的补丁吗,这样那个不好,要检测系统是否安装好了补丁才行,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix里面有纪录,应该是将这个已经安装的列表出来对比才行
第8楼 dikex 发表于 2007-01-09 02:41
高级用户 发帖 366 积分 788
@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 ]
第9楼 vkill 发表于 2007-01-09 02:42
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
qchain.exe

这个文件是???
第10楼 ronin 发表于 2007-01-12 02:09
中级用户 发帖 111 积分 421
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\MSXML4SP2\Q927978
msxml4-KB927978-chs.exe在这里有记录
第11楼 lxmxn 发表于 2007-01-12 02:26
版主 发帖 4,938 积分 11,386

  systeminfo里面貌似也有一点系统补丁的信息。
第12楼 dikex 发表于 2007-01-12 02:42
高级用户 发帖 366 积分 788
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
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023