[コマンド] systeminfo + wusa (2):更新プログラムをまとめてアンインストールする(その2)-バッチファイルを利用して(Windows Updateを戻す)

更新プログラムの削除に関してよく聞かれるので、更新プログラム削除用のバッチファイルを生成するバッチファイル(メタバッチファイル)を紹介したいと思います。
なお、wusaコマンドについては[コマンド] systeminfo + wusa : 更新プログラムをまとめてアンインストールする(Windows Update Stand-Alone)の記事を参考にしてください。

■ 動作確認環境

  • OS: Windows8.1 (6.3.9600)
  • Hardware: Sony Vaio Duo: SV1122AJ

■ 注意!

機械的に生成されたバッチファイルで、システムファイルを削除していくのはかなり命知らずなことです。自分で意味をしっかり理解した上で実行してください。最悪、Windowsが起動できなくなる恐れがあります。
REM temp1.txtは、システム情報からKnowledgeBaseに関する部分を抽出したもの
systeminfo | find "KB" > temp1.txt

REM temp2.txtは、wusaのコマンドを羅列している
type nul > temp2.txt
setlocal ENABLEDELAYEDEXPANSION
for /F "tokens=2 delims=: " %%i IN (temp1.txt) do (
    set line=%%i
    echo wusa /uninstall /KB:!line:KB=! /quiet /norestart >> temp2.txt
)

REM temp3.txtは、新しい更新プログラムから順にアンインストールしていく
type temp2.txt | sort /R > temp3.txt

notepad temp3.txt

 

■ 使い方

上記のコードをgen_uninstall_kbs.batなどとファイル名で保存して、実行してください。temp1, temp2, temp3の3つのテキストファイルができます。temp3.txtがメモ帳で表示されるはずなので、中身を確認してuninstall_kbs.batなどとファイル名を変更すると、実行できるようになります。
2016-04-25 15_58_23-temp3.txt - メモ帳

■ コードの説明

テキストファイルの中身を加工する処理でつまったので、少し解説します。
2016-04-25 16_16_54-C__Users_yasuta373_Dropbox_Tool__gnu_home_msbat_findkb.bat - sakura 2.1.0.0
7行目は、nulファイルからtemp2.txtを生成しています。これによりtemp2.txtは初期化されます。
(cf: Windows のコマンドプロンプトで空ファイルを作成する方法)
8行目はENABLE DELAYED EXPANSION(遅延展開を有効にする)ですが、これがないと9行から始まるForループの中で、10行目のlineの値が常に最後の%%iになってしまいます。(試しに外してみて動作を確認してみてください)
(cf: バッチファイルで、for文の中のsetがうまく動作しバッチファイ...)
11行目では、lineの値に含まれるKBを消して、前後のコマンド文をファイルに書き込んでいます。

■まとめ

本質的な処理を短くまとめたコードで自分用なので、エラー対応や中間ファイルの削除などはしていません。リスクをしっかり認識したうえで、コードはあくまで参考で、自分用のツールを作ってください。