系统补丁检测并安装批处理
来源:互联网 发布:使用bat运行java程序 编辑:程序博客网 时间:2024/05/05 04:19
命令systeminfo,可以列出打过的补丁,当然,也可以使用下面的方法来检测和打补丁。
@ECHO offREM By LeoSET TITLE=Windows 补丁安装脚本 V0.070408TITLE %TITLE%SETLOCAL ENABLEDELAYEDEXPANSIONSET PATCHFLAG=KBSET CAT=%PATCHFLAG%*.catSET PATCHLIST="%temp%\patcheslist.tmp"SET INSTALLED=√ 已安装SET NOTINSTALLED=× 未安装SET DELIMS=-----------------------------------------SET PATCH_TOTAL=0SET PATCH_NOTINSTALLED=0SET FLAG_INSTALLED=1*SET FLAG_NOTINSTALLED=0* :mainTITLE 正在搜索... -- %TITLE%ECHO 正在搜索当前目录"%cd%"及其子目录下的补丁...ECHO 如果想在搜索完成后立即安装未安装的补丁,请按回车。ECHO.REM 搜索补丁,没有搜索到则退出,否则继续。CALL :pfind || (call :error 1& goto :eof)ECHO.:confirmTITLE 请选择要安装的补丁 -- %TITLE%ECHO 搜索到如上%PATCH_TOTAL%个补丁,其中%PATCH_NOTINSTALLED%个未安装。安装全部请输入ALL,否则请直接按回车安装尚未安装的补丁。SET confirm=SET /p confirm=IF /i "%confirm%" == "ALL" (SET confirm= ) ELSE IF not defined confirm (SET confirm=%FLAG_INSTALLED:~0,1% ) ELSE GOTO confirmECHO %DELIMS%ECHO.ECHO 正在安装,请稍候。安装程序不会抢占窗口焦点,所以你可以干点别的:)ECHO.CALL :setup %confirm%del %PATCHLIST% 2>nul >nulTITLE 安装已结束 -- %TITLE%ECHO %DELIMS%ECHO.ECHO 安装已结束。要使补丁生效,你可能需要手动重新启动计算机。ECHO 按任意键退出。SET TITLE=ENDLOCALPAUSE >nulTITLE %ComSpec%goto :eof REM 安装补丁:setupif "%1" == "" (set patchsum=%PATCH_TOTAL%) ELSE set patchsum=%PATCH_NOTINSTALLED%set patch_counter=0FOR /f "eol=%1 usebackq tokens=2,*" %%i in (%PATCHLIST%) DO ( set /a patch_counter+=1 TITLE !patch_counter!/%patchsum%-%%i -- %TITLE% set nobackup=nobackup echo %%i | find /i "%PATCHFLAG%8" 2>nul >nul && set nobackup=n %%j /quiet /passive /norestart /!nobackup! 2>nul >nul ECHO !patch_counter!/%patchsum% %%i √)goto :eof REM 搜索当前目录下的补丁,返回非零值为失败。:pfindSET REG=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallSET listinreg="%temp%\listinreg.tmp"reg query %reg%>%listinreg%del %PATCHLIST% 2>nul >nulREM 补丁是一个压缩包FOR /r %%i in (*%PATCHFLAG%*.exe) DO CALL :pfind.sub "%%~ni" "%%~fi" "%%~sfi"REM 补丁在压缩包展开后的目录内FOR /r %%i in (%cat%) DO IF exist %%~dpiupdate.exe FOR /f %%j in ("%%~dpiupdate.exe") DO CALL :pfind.sub "%%~ni" "%%~fj" "%%~sfj"IF not exist %PATCHLIST% EXIT /b 1sort %PATCHLIST% /o %PATCHLIST%rem 得到补丁个数FOR /f "tokens=3 delims= " %%i in ('find /c /i "%FLAG_NOTINSTALLED%" %PATCHLIST%') DO SET PATCH_NOTINSTALLED=%%iFOR /f "tokens=3 delims= " %%i in ('find /c /i "%FLAG_INSTALLED%" %PATCHLIST%') DO SET /a PATCH_TOTAL=%%i + %PATCH_NOTINSTALLED%del %listinreg% 2>nul >nulIF not defined patch_total EXIT /b 2IF %patch_total% LSS 1 EXIT /b 3EXIT /b 0goto :eofREM 看看补丁安装了没,然后写到标准输出和%PATCHLIST%内:pfind.subIF "%~3" == "" GOTO :eofCALL :getkbnum %1SET id=!errorlevel!IF not "!id!" == "-1" ( find /i "!id!" %listinreg% 2>nul >nul && ( set status=%FLAG_INSTALLED%& set isinstalled=%INSTALLED% )||(set status=%FLAG_NOTINSTALLED%& set isinstalled=%NOTINSTALLED%) ECHO !status! %PATCHFLAG%!id! %2>>%PATCHLIST% ECHO !isinstalled! %PATCHFLAG%!id! %3)goto :eof REM 返回给定字串中的KB号,返回-1表示失败。:getkbnumSETLOCAL ENABLEDELAYEDEXPANSIONSET str=%~1IF not defined str EXIT /b -1IF not defined PATCHFLAG SET PATCHFLAG=KBecho %PATCHFLAG%>getsize.tmpfor %%i in (getsize.tmp) do SET /a offset=%%~zi-2del getsize.tmp 2>nul >nulSET start=0REM 仅有%PATCHFLAG%则返回-1IF /i "%str%" == "%PATCHFLAG%" EXIT /b -1REM 删除%PATCHFLAG%前的字符,删除失败则返回-1:getkbnum.findkbIF "%~1" == "!str!" (IF "!str:~%start%,%offset%!" == "" (EXIT /b -1 ) ELSE IF /i "!str:~%start%,%offset%!" == "%PATCHFLAG%" (SET str=!str:~%start%! ) ELSE (SET /a start+=1 & goto getkbnum.findkb))REM 仅有%PATCHFLAG%则返回-1SET str=!str:~%offset%!IF "%str%" == "" EXIT /b -1SET start=0REM 保证%PATCHFLAG%后的第一个字符不是数字时,仍能返回-1IF "!str:~%start%,1!" GTR "9" EXIT /b -1IF "!str:~%start%,1!" LSS "0" EXIT /b -1REM 返回%PATCHFLAG%后的数字:getkbnum.findnumIF "!str:~%start%,1!" GTR "9" EXIT /b !str:~0,%start%!IF "!str:~%start%,1!" LSS "0" EXIT /b !str:~0,%start%!SET /a start+=1goto getkbnum.findnumENDLOCALEXIT /b -1 :errorTITLE ERROR -- %TITLE%IF "%1" == "1" (ECHO 没有找到补丁。使用的搜索规则是:CAT:%cat%,PATCHFLAG:%PATCHFLAG%。程序已结束。)SET TITLE=PAUSE >nulTITLE %ComSpec%goto :eof
- 系统补丁检测并安装批处理
- 如何批处理自动安装winxp系统补丁?
- 使用批处理自动安装系统补丁
- 批处理装系统补丁
- 批处理安装补丁
- 批处理自动安装Windows补丁
- xp系统安装sql 2000企业版,并打上sp4补丁
- 远程检测客户机上的系统补丁安装情况与端口开放状态
- 批处理 检测 并修改系统屏保时间和密码最大过期时间
- 利用WMI实现系统补丁检测
- BW系统安装补丁过程
- Linux下debian系统安装配置OpenCV并检测程序
- 简单安装补丁的批处理(网上找的)
- JDK安装并检测
- win7 64系统,检测有没有装SP1补丁!
- 批量安装系统补丁的方法
- 系统补丁及软件的集成安装
- 批量安装Windows系统补丁的脚本
- Linux下查找文件
- 一些笔试题
- C#用firefox3.6下载yunfile的文件
- 各大视频网站屏蔽广告方法,映射广告IP到本地
- libre office excel
- 系统补丁检测并安装批处理
- MYSQL之load data使用详解
- mysql中limit的用法详解[数据分页常用]
- IOS应用打包及安装
- snmp编程的开发工具包简介
- 内存布局小结
- 类型转换中as、is的使用
- Spring任务调度配置
- 很棒的讲解字典的文章