1. 程式人生 > >用批處理實現windows更新自動安裝

用批處理實現windows更新自動安裝

前兩天重灌了windows xp系統,裝完可把我害慘了。
由於我一直不喜歡用windows的自動更新,因為它下載速度實在不敢恭維。就一直用360safe掃描漏洞,有補丁就裝上。感覺也很輕鬆了。
那天裝完系統用360safe一掃,居然有60多個漏洞。天哪!還好我上次重灌系統時已經下了50多個補丁了。於是就把剩餘的幾個也趕快下了下來。
剩下的就是裝補丁了,那可是一個一個點呀。而有的更新裝上後還會問你要不要立即重啟,一不小心忘記勾上“現在不重新啟動”那就慘了,你就等著再欣賞一次開機畫面吧。(呵呵)最後點得我手都酸了,總算裝完了。
鑑於這次安裝更新的痛苦,這兩天我一直在想windows自動安裝更新時不就說“正在安裝更新,你可以繼續你的工作”麼?可見windows更新還是支援後臺安裝的,於是我就準備研究一番。一定要實現更新自動安裝。
首先想到了批處理,對,想名字就知道了,因為裝完系統後有一大堆更新要裝,不想一個一個點選安裝的話就只能成批處理它們了,呵呵。開玩笑了。
閒話少說,切入正題。思路既然有了,於是我就拿了幾個更新包做試驗。心想只要在批處理中依次執行這幾個更新包不就行了麼??
於是寫了一個bat檔案--windows更新自動安裝.bat。內容如下: 

@echooff
WindowsXP-KB920213-x86-CHS
.exe 
WindowsXP-KB922760-x86-CHS
.exe 
WindowsXP-KB922819-x86-CHS
.exe 
echo  windows更新安裝完畢!

這樣就簡單的實現了更新的自動安裝,但是隻是免去了雙擊各個更新包的痛苦,還是要點“我同意”,“確定”等按鈕,我能心甘麼?就想有沒有更好的辦法讓它真正實現自動安裝就好了。於是就想呀想,試呀試。
又半個小時過去了,我把那個bat檔案改來改去的,但是好像進展不大。
思考ing~~~~
偶然間,在我把一個更新包無意中拖到另一個更新包上的時候,奇蹟出現了。居然彈出了一個幫助對話方塊。上面清清楚楚的說明了更新包的各個使用引數。

/help         顯示幫助資訊
    安裝模式
/quiet            安靜模式
/passive      無人蔘與模式(顯示進度攔)
重新啟動選項
/norestart         安裝完成不重新啟動
/forcerestart    安裝完成後重新啟動
/warnrestart
[:<seconds>]    如果需要,顯示警告並自動重新啟動(預設超時30秒)
/promptrestart                        如果需要重新啟動
,提示使用者
特別選項
/overwriteoem                 不提示覆蓋OEM資訊
/nobackup                       不備份解除安裝需要的檔案
/forceappsclose             強制其他程式在關機時關閉
/integrate:<fullpath>      將此更新整合到<fullpath>
/log:<fullpath>                在<fullpath>建立日誌檔案


如下圖:


一眼就看到了 /quiet (安靜模式)和 /norestart (安裝完成後不要重新啟動) 兩個引數,呵呵。要的就是它們。Let's go!!
現在把上面的windows更新自動安裝.bat 修改一下,並且加上進度提示:

@echooff
echo  安裝WindowsXP-KB920213-x86-CHS.exe 
    WindowsXP-KB920213-x86-CHS
.exe    /quiet  /norestart
   
echo  安裝WindowsXP-KB922760-x86-CHS.exe
   WindowsXP-KB922760-x86-CHS
.exe    /quiet  /norestart
   
echo  安裝WindowsXP-KB922819-x86-CHS.exe
   WindowsXP-KB922819-x86-CHS
.exe    /quiet  /norestart
   echo  windows更新安裝完畢!

呵呵,這下好多了。每次安裝一個更新前,先提示安裝某某更新。

不過新問題也隨之而來,你可能早就猜出來了,呵呵。就是更新包多的時候,光是寫這個批處理檔案你就得不停得Ctrl+C,Ctrl+V的copy來copy去,再說每次安裝新的更新包時,還要新寫一個bat檔案,把各個更新包的名字寫進去,這樣這個bat檔案就顯得很笨拙了。

那有沒有更好的通用一點的辦法呢?

偶然間想到了for命令,它的功能可強大了。如果能用for對每個更新包進行判斷不就可以自動安裝更新了麼?呵呵。於是寫了一個bat檔案,主要語句為

for/r  %%a in (*.exe)do%%a  /quiet  /norestart

其中 /r 引數用於遍歷整個目錄樹,in (*.exe) 表示遍歷當前資料夾的所有exe檔案。執行時萬用字元%%a依次用當前資料夾中的exe檔名代替,這樣執行do  %%a  /quiet  /norestart就是依次執行各個更新包了。終於大功告成了。關於for命令的詳細解釋,有興趣的朋友請參閱相關的批處理資料。或者在cmd裡也可以查到for命令的資訊,開啟cmd,輸入for  /? ,回車即可。

寫了這麼多,最後整理一下。給大家一個清晰的思路。

@echooff
cls
color 0b
title windows更新自動安裝------By Alxen
(小雨)
echo                    ┌────────────────────────┐
echo                    │    windows 更新自動安裝程式       │
echo                    ├────────────────────────┤  
echo                    │              By alxen(小雨)           │
echo                    │                  2007.04.12           │
echo                    └────────────────────────┘ 

echo 使用說明:      
echo     把本批處理檔案放在windows更新檔案所在目錄,執行本檔案即可完成自動安裝
echo 即將開始安裝windows更新...
pause

::/quiet 安靜模式  /norestart 安裝完成不重新啟動
for/r  %%a in (*.exe)doecho 安裝%%~na.exe && %%a /quiet /norestart

echo windows更新全部安裝完畢!
pause
exit

終於寫完了,以後重灌系統後只要寫一個這樣的bat檔案,放在windows更新包所在的資料夾下,執行這個bat檔案就可以了。

這下再也不用一個一個點選更新包安裝了,你只要下載更新包,其它的都交給 windows更新自動安裝.bat 吧。有了它,你會發現原來生活可以更美的。呵呵。(別扔雞蛋,偶不是太喜歡)

---------------------------------------

寫下上面的東東,功能實在微不足道,只是想給需要的朋友一點幫助。

                                                  小雨(alxen)                            2007.4.12