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