中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [原创]XP 补丁自动安装 上一主题 | 下一主题
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『楼 主』:  [原创]XP 补丁自动安装

放在补丁目录下运行,可以自动判断已安装的补丁并跳过(不用生成临时文件,跳过的速度比用findstr查找临时列表的速度快多了),其他请看文件说明

麻烦会查找其他补丁安装后注册位置的DX提个醒

请自行将{TAB}改为制表符(键盘TAB键
::XP 补丁自动安装 - code zh159@bbs.cn-dos.net 2007-12-6
::本 XP 补丁安装目前只能自动安装 /q /z /o 参数,
::并在 [HKLM\SOFTWARE\Microsoft\windows nt\Currentversion\Hotfix] 注册的 XP 补丁,
::其余的自行修改。【XP 补丁文件名称为下载的原始名称】
@echo off
title XP 补丁安装
echo.
echo.  获取系统已安装补丁列表,请稍等. . .
echo.
for /f "tokens=7 delims=\" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\windows nt\Currentversion\Hotfix"^|findstr /i "kb"') do (
  set "str=%%i"
  call set "☉%%str:~0,8%%= "
  set /a Num+=1
  call set/p=  系统已安装 %%Num%% 个补丁。<nul
  set /p=<nul
)
echo.&echo.

set Num=0
for /f "delims=" %%i in ('dir/b/on *KB*.exe 2^>nul') do (
  for /f "tokens=2 delims=-" %%n in ("%%i") do set "⊕%%n=%%i"
  set /a Num+=1
  call set/p=  当前目录下有 %%Num%% 个补丁。<nul
  set /p=<nul
)
if %Num% == 0 echo.  当前目录没有 XP 补丁文件!请按任意键退出程序。&pause>nul&exit
echo.&echo.

set Num=0
echo.  是否开始装补丁?
set /p YN=  ([Enter]直接回车开始安装/[L]显示系统已安装补丁列表/[X]退出):
if /i "%YN%" == "X" exit
if /i "%YN%" == "L" (
  echo.
  for /f "delims=☉=" %%i in ('set ☉') do (
    set /a Num+=1
    call set "List=    %%Num%%. "
    call set "List=%%List:~-6%%"
    call set/p=%%List%%%%i{TAB}<nul
  )
  echo.&echo.&echo.  请按任意键继续安装补丁. . .&pause>nul
)

echo.
echo.  开始安装补丁. . .
echo.
set Num=0
set New=0
for /f "tokens=1,2* delims=⊕=" %%n in ('set ⊕') do (
  set /a Num+=1
  if defined ☉%%n (
    call echo.  %%Num%%.{TAB}%%o  补丁已安装。
  ) else (
    set /a New+=1
    call echo.  %%Num%%.{TAB}%%o  补丁开始安装,请稍等. . .
    call %%o /q /z /o
  )
)
echo.
echo  补丁安装完毕,本次安装新补丁 %New% 个!
pause>nul
exit
[ Last edited by zh159 on 2007-12-7 at 12:36 AM ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 lijinan 分数: +2  时间:2010-6-19 18:14




2007-12-7 00:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





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

我想在p后面最好附个 补丁的安装参数 ,这样p更完美

2007-12-7 01:02
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





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

以前写的,觉得用处不大就没有发帖子出来
@echo off
title windows xp/2003自动更新  V:1.2  by:vkill
::详细信息查看http://www.vkill.net/cmd-life/p-SystemAutoUpdate.html
::需要 wget.exe / sed.exe / ConCmd.rar(ConCmd.exe ConCmd.ini gbfix.dat B5fix.dat) 文件,请到http://www.vkill.net/tools.html下载
::config:::::::::::::::::::::
::可修改参数,开始日期指查找所有本日期后发布的更新,开始日期优先于发行日期
set "开始日期=4/1/2007"
set "发行日期=90"
set "t=test.t"
::下面为不可修改的参数如修改请查看http://www.microsoft.com/downloads/advancedsearch.aspx?displaylang=zh-cn
set "关键字="
set "产品/技术="
set "类别=7"
set "结果排序方式=date"
set "每页显示结果数=50"
set "语言=zh-cn"
set "是否显E文=on"
set "url=http://www.microsoft.com/downloads/"

::start::::::::::::::::::::::::::::::
::当加参数 /update_code 运行本程序时将自动升级
set "o=%~0"
if "%~1"=="/update_code" (call :update_code & exit /b)

if exist 需安装补丁.txt (
  echo 上次未更新完,继续上次开始更新,6秒后自动开始
  ping -n 6 127.1 >nul 2>nul
  goto down_and_install_up
                        )

set "关键字="
ver|find "5.1" >nul 2>nul &&(set "关键字=xp")
ver|find "5.2" >nul 2>nul &&(set "关键字=2003")
if not defined 关键字 (echo 本程序只支持xp/2003系统,6秒后退出&ping -n 6 127.1 >nul 2>nul&goto :eof)
for /f "tokens=2 delims=[]" %%? in ('ping -n 1 www.microsoft.com ^|findstr /i "^ping.*[.*]"') do (set "ip=%%?")
if not defined ip (echo 连接不到microsoft.com,6秒后退出&ping -n 6 127.1 >nul 2>nul&goto :eof)

echo 查找需安装补丁中,请稍候......
md "%t%" >nul 2>nul
pushd "%t%"
del /f/q *.* >nul 2>nul
for /f "tokens=*" %%? in ('echo %开始日期%^|sed -r "s/\/|\-|\./%%2f/g"') do (set "开始日期=%%?")
set "url_downi=%url%results.aspx?startdate=%开始日期%&freetext=%关键字%&productID=%产品/技术%&categoryId=%类别%&period=%发行日期%&sortCriteria=%结果排序方式%&nr=%每页显示结果数%&DisplayLang=%语言%&DisplayEnglishAlso=%是否显E文%"


set n=0
:loop_down_i
set/a n+=1
wget -q -O "index.txt" "%url_downi%"
ConCmd.exe /i:utf8 /o:gbk /q "index.txt" "i_%n%.txt"
findstr ">下一个" "i_%n%.txt" >nul 2>nul &&(
  for /f "tokens=*" %%? in ('sed -r "/>下一个/!d;s/.*<a href=\x22([^\x22]*)\x22>.*/\1/;s/amp;//g" "i_%n%.txt"') do (set "url_downi=%url%%%?")
  goto loop_down_i
                                           )
::loop_down_i end

for /l %%? in (1,1,%n%) do (
sed -r "/[(]?KB[0-9]{6}[)]?<\/a>/!d;s/.*(<a href=\x22)([^\x22]*)(\x22>)(.*)[(]?(KB[0-9]{6})[)]?(<\/a>).*/\5,\4,\2/;s/amp;//g" "i_%%?.txt"|more>>"liebiao.txt"
)

::过滤x86 /x64
copy liebiao.txt liebiao_l.txt >nul 2>nul
if "%PROCESSOR_ARCHITECTURE%"=="x86" (findstr /V "x64" liebiao_l.txt >liebiao.txt 2>nul)
if "%PROCESSOR_ARCHITECTURE%"=="x64" (findstr /V "x86" liebiao_l.txt >liebiao.txt 2>nul)

::找到需更新文件的绝对下载地址
cd.>downpage.txt

for /f "tokens=1,2,3 delims=," %%a in ('type "liebiao.txt"') do (
  del /f/q "t_*.txt" >nul 2>nul
  wget -q -O "t_u.txt" "%url%%%c"
  ConCmd.exe /i:utf8 /o:gbk /q "t_u.txt" "t_g.txt"
  sed -r "/value=\x22(下载|Download)\x22><\/form>/!d;s/.*\{window.open[(]*'([^']*)',.*/%%a,%%b,\1/" "t_g.txt"|more>>"downpage.txt"
                                                                 )
for /f "tokens=*" %%? in ('systeminfo^|sed -r "/KB[0-9]{6}/!d;s/.*(KB[0-9]{6}).*/\1/"') do (>>"已安装补丁.txt" echo %%?)
findstr /B /V /G:"已安装补丁.txt" "downpage.txt" >"..\需安装补丁.txt" 2>nul
popd

:down_and_install_up
mode con cols=100 lines=30
echo                      -----windows xp/2003 自动更新-----
echo.
echo 需要安装补丁列表如下:
echo ________________________________________________________________________________
for /f "tokens=1,2,3 delims=," %%a in ('type "需安装补丁.txt"') do (echo "%%a,%%b")
echo ________________________________________________________________________________

for /f "tokens=1,2,3 delims=," %%a in ('type "需安装补丁.txt"') do (
  echo "%%a,%%b" 补丁
  echo         下载中,请稍候......
  wget -c -q -O "%%~nxc" "%%c"
  echo         安装中,请稍候......
  ::微软补丁自动化安装参数见最下面的 附-
  "%%~nxc" /passive /norestart /u /o /z /q
)

echo 所有补丁安装完毕,6秒后退出&ping -n 6 127.1>nul 2>nul
del /f/q 需安装补丁.txt>nul 2>nul
goto :eof

:update_code
setlocal ENABLEDELAYEDEXPANSION
::最后更新[6/9/2007]
md "%t%" >nul 2>nul
pushd "%t%"
del /f/q *.*>nul 2>nul
wget -q -O "i.txt" "http://www.vkill.net/cmd-life/p-SystemAutoUpdate.html"
for /f "tokens=1 delims=:" %%? in ('findstr /N "^<TEXTAREA" "i.txt"') do (more +%%? i.txt>"a")
for /f "tokens=1 delims=:" %%? in ('findstr /N "^<\/TEXTAREA>" "i.txt"') do (set/a "a=%%?-1" & more +!a! i.txt>"b")
findstr /V /B /E /G:"b" "a">"c"
for /f "tokens=2 delims=[]" %%? in ('findstr "^::最后更新\[.*\]" "%o%"') do (set "lastupdate_l=%%?")
if not defined lastupdate_l (set "lastupdate_l=06/06/2007")
for /f "tokens=2 delims=[]" %%? in ('findstr "^::最后更新\[.*\]" "c"') do (set "lastupdate_n=%%?")
if "%lastupdate_l%" lss "%lastupdate_n%" (
  echo 检测到新版本,任意键开始更新,更新完成后会自动退出程序,请重新运行
  pause>nul
  copy "c" "%o%"
                                       ) else (echo 本程序当前为最新版本,任意键退出&pause>nul)
goto :eof

::附-微软补丁自动化安装命令:::::::::::::::::::
*.exe /passive /norestart 参数
-u       无人参与模式
-f       强迫其它程序在关机时关闭
-n       不要为卸载备份文件
-o       不提示覆盖OEM文件
-z       安装完成后不要重新启动
-q       安装模式(无需用户参与)
-l       列出已经安装的补丁程序
-s:<dir> 将Service Pack文件集成到<dir>路径
-d:<dir> 文件备份到<dir>路径
::::::::::::::::::::::::::::::::::::::::::::::

::


2007-12-7 01:20
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 4 楼』:  

试过systeminfo查找已安装补丁,但KB的我的机子只找出106个,注册表可以找出113个,所以放弃systeminfo查找已安装补丁

而新补丁不打算用P下载,使用360安全卫士和KV查找、下载漏洞补丁方便得多



2007-12-7 02:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 5 楼』:  

是的,用处并不大,只是重新安装补丁。只是找不到相应的Ftp网站,不然自动下载这些补丁重新安装或者收集,今天去google下有没有相应的网站。

另外zh159兄最后应该还要清理KB留下的垃圾



第一高手    第二高手

2007-12-7 08:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 6 楼』:  

微软http补丁地址列表
http://www.littleyu.com/article/windows_spack.html



第一高手    第二高手

2007-12-7 09:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 7 楼』:  

使用Windows Update在国内的镜象站点,这些站点与微软同步更新,下面几个速度较快:
西安交通大学:http://202.117.21.253/
厦门大学:http://windowsupdate.xmu.edu.cn
上海交通大学:http://windowsupdate.sjtu.edu.cn



第一高手    第二高手

2007-12-7 09:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
shtcool
初级用户





积分 49
发帖 20
注册 2007-10-23
状态 离线
『第 8 楼』:  

请教一下:set "☉%%str:~0,8%%= " 这句有何用处?清空环境变量☉kb... ?

[ Last edited by shtcool on 2007-12-7 at 12:04 PM ]

2007-12-7 11:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





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

只是以前写的,当时就觉得用处不大就没有发,昨天看到这个帖子就随便附上了,留给想看的人看好了

2007-12-7 17:17
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
nipo
中级用户





积分 228
发帖 106
注册 2008-4-26
状态 离线
『第 10 楼』:  

你们打补丁的P~~~搞得这么复杂啊?

2008-5-12 01:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cnds
初级用户





积分 37
发帖 36
注册 2008-12-2
状态 离线
『第 11 楼』:  

我也基本上看不懂,太高深了。

2010-10-18 22:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: