标题: p-SystemAutoUpdate.cmd (windows xp/2003自动更新 )
[打印本页]
作者: vkill
时间: 2007-6-8 13:40
标题: p-SystemAutoUpdate.cmd (windows xp/2003自动更新 )
@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>路径
::::::::::::::::::::::::::::::::::::::::::::::
::
[
Last edited by vkill on 2007-6-9 at 09:38 PM ]
作者: vkill
时间: 2007-6-8 13:40
希望大家多提改进意见哈
继续改中...
[
Last edited by vkill on 2007-6-9 at 09:39 PM ]
作者: stornager
时间: 2007-6-8 14:48
楼主真强,向你学习啦!!