先說結論:這份批次檔會停止 WMI 服務、重建 WMI Repository、重新註冊元件,屬於進階修復。若只是一般系統檔案損壞,請先執行本文的 DISM 與 SFC;只有在 WMI 明確異常,且已備份重要資料或經技術人員確認後,才執行完整批次檔。
什麼情況適合參考這篇教學?
WMI(Windows Management Instrumentation,Windows 管理規範)提供系統資訊與管理資料給裝置管理、監控軟體、企業管理工具及部分安裝程式使用。當您遇到「WMI: Not Found」、WBEM_E_INVALID_CLASS、WBEM_E_NOT_FOUND、系統資訊無法讀取,或依賴 WMI 的管理程式持續失敗時,才可能需要處理 WMI。
如果問題只是單一應用程式打不開、網路不通、印表機離線或電腦變慢,原因不一定是 WMI。請先重新開機、安裝 Windows 更新,並確認該應用程式本身的錯誤訊息,不要直接執行重建。
第一階段:先做低風險修復
Microsoft 建議修復系統檔案時先執行 DISM,再執行 SFC。請在工作列搜尋「命令提示字元」,按右鍵選擇「以系統管理員身分執行」,依序輸入:
DISM.exe /Online /Cleanup-Image /RestoreHealth看到作業成功完成後,再輸入:
sfc /scannow請等到驗證達到 100%,不要關閉視窗。完成後重新啟動電腦,測試原本發生錯誤的功能。若問題已排除,就不需要再執行 WMI 重建批次檔。
第二階段:執行前的四項準備
- 備份重要資料:至少先備份桌面、文件與工作檔案;公司電腦請先通知資訊人員。
- 建立還原點或系統備份:此批次檔會變更 Windows 系統元件及 WMI 資料庫,請保留回復方式。
- 接上電源並關閉其他程式:筆電請接上充電器,暫存正在編輯的內容,避免修復期間休眠或關機。
- 準備管理員帳號與網路:批次檔需要系統管理員權限;DISM 通常會透過 Windows Update 取得修復來源。
第三階段:如何完成 BIG5 批次檔
可直接複製的完整批次檔程式碼
請從第一行 @echo off 複製到最後一行 exit /b 0,中間不要漏行。這個版本也修正了原檔權限不足時使用 Windows 預設不存在的 tee 指令,並加入 chcp 950,讓 Big5 中文提示較不容易變成亂碼。
@echo off
chcp 950 >nul
:: WMI_Full_Repair_Fixed.bat
:: 改良版:具有權限檢查、錯誤處理與日誌記錄
setlocal enabledelayedexpansion
:: 日誌路徑
set "LOG=C:\WMI_Repair_Log.txt"
echo ===== WMI Repair started at %date% %time% =====> "%LOG%"
echo. >> "%LOG%"
:: 權限檢查(需要管理員)
net session >nul 2>&1
if errorlevel 1 (
echo [ERROR] 必須以系統管理員身分執行此批次檔。
echo 請在檔案上按右鍵,選擇「以系統管理員身分執行」。
echo [ERROR] 必須以系統管理員身分執行。 >> "%LOG%"
pause
exit /b 1
)
echo [INFO] 以系統管理員執行。 >> "%LOG%"
:: 切換到 wbem 目錄
pushd "%windir%\System32\wbem" 2>> "%LOG%"
if errorlevel 1 (
echo [ERROR] 無法進入 %windir%\System32\wbem。
echo [ERROR] 無法進入 WMI 工作目錄。 >> "%LOG%"
pause
exit /b 1
)
echo [INFO] Working folder: %cd% >> "%LOG%"
:: Step A:停止 WMI 與相關進程
echo.
echo [1/9] 停止 WMI 服務與相關程序...
echo [1/9] net stop winmgmt /y >> "%LOG%"
net stop winmgmt /y >> "%LOG%" 2>&1
:: 強制終止 wmiprvse.exe(若存在)
tasklist /FI "IMAGENAME eq wmiprvse.exe" 2>> "%LOG%" | find /I "wmiprvse.exe" >nul
if not errorlevel 1 (
echo [INFO] 偵測到 wmiprvse.exe,嘗試強制結束 >> "%LOG%"
taskkill /f /im wmiprvse.exe >> "%LOG%" 2>&1
)
:: Step B:備份並重建 Repository(若存在)
echo.
echo [2/9] 備份並嘗試重建 WMI Repository...
if exist Repository (
if exist Repository.old rd /s /q Repository.old >> "%LOG%" 2>&1
ren Repository Repository.old >> "%LOG%" 2>&1
echo [INFO] Repository 已改名為 Repository.old >> "%LOG%"
) else (
echo [INFO] Repository 不存在,跳過改名。 >> "%LOG%"
)
echo [2/9] winmgmt /resetrepository >> "%LOG%"
winmgmt /resetrepository >> "%LOG%" 2>&1
echo [INFO] resetrepository 完成或已回報錯誤。 >> "%LOG%"
:: Step C:重新註冊 WMI DLL
echo.
echo [3/9] 重新註冊 wbem 下的 DLL(此步驟可能花較久)...
for %%F in (*.dll) do (
echo [REG] regsvr32 /s "%%~fF" >> "%LOG%"
regsvr32 /s "%%~fF" >> "%LOG%" 2>&1
)
echo [3/9] 註冊 wmiprvse / winmgmt 服務註冊點 >> "%LOG%"
wmiprvse /regserver >> "%LOG%" 2>&1
winmgmt /regserver >> "%LOG%" 2>&1
:: Step D:複製 MFL(若存在 en-US / zh-TW)
echo.
echo [4/9] 嘗試複製語系 mfl 檔案到 wbem 根目錄...
set "COPIED=0"
if exist "%windir%\System32\wbem\zh-TW\cimwin32.mfl" (
copy /Y "%windir%\System32\wbem\zh-TW\cimwin32.mfl" "%windir%\System32\wbem\" >> "%LOG%" 2>&1
set "COPIED=1"
echo [INFO] 複製 zh-TW\cimwin32.mfl >> "%LOG%"
)
if "%COPIED%"=="0" if exist "%windir%\System32\wbem\en-US\cimwin32.mfl" (
copy /Y "%windir%\System32\wbem\en-US\cimwin32.mfl" "%windir%\System32\wbem\" >> "%LOG%" 2>&1
set "COPIED=1"
echo [INFO] 複製 en-US\cimwin32.mfl >> "%LOG%"
)
if "%COPIED%"=="0" (
echo [WARN] 未找到 en-US 或 zh-TW cimwin32.mfl,跳過複製。 >> "%LOG%"
)
:: Step E:用 mofcomp 載入核心 MOF/MFL
echo.
echo [5/9] 編譯 cimwin32.mof 與 cimwin32.mfl...
if exist "%windir%\System32\wbem\cimwin32.mof" (
echo [MOF] mofcomp "%windir%\System32\wbem\cimwin32.mof" >> "%LOG%"
mofcomp "%windir%\System32\wbem\cimwin32.mof" >> "%LOG%" 2>&1
) else (
echo [WARN] 無 cimwin32.mof,跳過。 >> "%LOG%"
)
if exist "%windir%\System32\wbem\cimwin32.mfl" (
echo [MFL] mofcomp "%windir%\System32\wbem\cimwin32.mfl" >> "%LOG%"
mofcomp "%windir%\System32\wbem\cimwin32.mfl" >> "%LOG%" 2>&1
)
:: Step F:批量編譯所有 .mof / .mfl
echo.
echo [6/9] 批量編譯資料夾內所有 .mof 與 .mfl 檔案...
set "COUNT=0"
for %%G in (*.mof *.mfl) do (
if exist "%%~fG" (
echo [MOFALL] mofcomp "%%~fG" >> "%LOG%"
mofcomp "%%~fG" >> "%LOG%" 2>&1
set /A COUNT+=1
)
)
echo [INFO] 已嘗試編譯 %COUNT% 個檔案。 >> "%LOG%"
:: Step G:啟動 WMI 服務
echo.
echo [7/9] 啟動 WMI 服務...
net start winmgmt >> "%LOG%" 2>&1
:: Step H:先用 DISM 修復映像,再用 SFC 修復檔案
echo.
echo [8/9] 使用 DISM 修復 Windows 映像(可能需要一些時間)...
DISM /Online /Cleanup-Image /RestoreHealth >> "%LOG%" 2>&1
echo.
echo [9/9] 執行 SFC /scannow,修復系統檔案...
sfc /scannow >> "%LOG%" 2>&1
:: 完成
echo. >> "%LOG%"
echo ===== WMI Repair finished at %date% %time% ===== >> "%LOG%"
echo 完成。詳細日誌請看 %LOG%
echo.
popd
echo.
echo ==============================================
echo [OK] WMI 與系統修復流程已執行。
echo 日誌位置:%LOG%
echo 建議重新啟動系統以套用所有修復。
echo ==============================================
pause
exit /b 0複製完成後,請接著依下方四個步驟儲存。若只看到程式碼的一部分,請先完整展開文章再複製。
若您已收到華薪資訊提供的「修復win批次BIG5.bat」,可直接前往下一節。若收到的是經確認的純文字程式碼,請依下列方式建立檔案:
- 開啟檔案總管,選擇「檢視」並顯示「副檔名」,避免最後存成
.bat.txt。 - 開啟記事本,貼上技術人員提供的完整批次程式碼;不要自行刪除、合併或改寫指令。
- 選擇「另存新檔」,檔名輸入
修復win批次BIG5.bat,檔案類型選擇「所有檔案」。 - 繁體中文 Windows 可將編碼選為「ANSI」;跨語系工具請明確選擇 Big5/CP950。儲存後再次確認副檔名確實是
.bat。
BIG5 主要影響畫面上的繁體中文提示。若編碼選錯,指令可能仍會執行,但訊息與日誌可能變成亂碼,不利於判讀;建議關閉檔案後重新用記事本開啟,先確認中文能正常顯示。
第四階段:以系統管理員身分執行
- 在批次檔上按滑鼠右鍵,選擇「以系統管理員身分執行」。Windows 11 若未直接顯示此選項,先選擇「顯示其他選項」。
- 出現使用者帳戶控制視窗時,確認檔案來自可信任來源,再按「是」。
- 黑色命令視窗會顯示
[1/9]到[9/9]。請讓它自然完成,不要關閉視窗、不要重新執行第二份,也不要強制關機。 - 看到完成訊息後按任意鍵關閉,接著正常重新啟動 Windows。
請保留處理時間:重新註冊元件、DISM 與 SFC 都可能停留在某個百分比一段時間。只要磁碟仍有活動、視窗沒有回報致命錯誤,請耐心等待。
批次檔的 9 個步驟在做什麼?
- 停止 WMI:停止
winmgmt服務,並在需要時結束wmiprvse.exe,避免檔案仍被使用。 - 備份並重設 Repository:將現有 Repository 改名保留,再執行
winmgmt /resetrepository。這是整份流程風險最高的一步。 - 重新註冊 WMI 元件:重新註冊 WBEM 資料夾內的 DLL,以及 WMI 相關服務註冊點。
- 補齊語系檔案:視電腦現況尋找繁體中文或英文的
cimwin32.mfl。 - 載入核心定義:以
mofcomp編譯核心的 CIM/WMI 定義。 - 批次編譯 MOF/MFL:重新載入 WBEM 資料夾內的管理類別與語系描述。
- 重新啟動 WMI:啟動
winmgmt服務。 - 修復 Windows 映像:執行 DISM RestoreHealth。
- 檢查系統檔案:執行 SFC Scannow,修復遺失或損壞的受保護檔案。
第五階段:查看日誌與驗證結果
批次檔會將詳細紀錄寫入:
C:\WMI_Repair_Log.txt重新開機後,先測試原本故障的應用程式或管理功能。也可以再次以系統管理員身分開啟命令提示字元,執行:
winmgmt /verifyrepository若顯示 Repository 一致,代表 WMI 資料庫通過一致性檢查;這不等於所有第三方軟體都已修好,仍需測試原始問題。若日誌持續出現 Access is denied、DISM 錯誤碼、MOF 編譯失敗,或驗證結果仍不一致,請不要反覆執行批次檔。
常見問題排除
雙擊後視窗立刻關閉
先確認檔案不是 .bat.txt,再用右鍵「以系統管理員身分執行」。若仍失敗,請將日誌或畫面錯誤提供給技術人員。
畫面或日誌的中文變成亂碼
通常是檔案不是 Big5/CP950。請用記事本重新另存,繁體中文 Windows 選擇 ANSI,或請技術人員重新提供正確編碼的檔案。
DISM 或 SFC 長時間沒有前進
請先等待並觀察磁碟、CPU 與網路是否仍有活動。不要直接斷電;若最終回報錯誤,記下錯誤碼並保留 C:\WMI_Repair_Log.txt。
公司電腦、網域電腦或 Windows Server 可以直接執行嗎?
不建議自行執行。WMI Repository 可能包含管理、監控及第三方軟體註冊資訊;重設後可能需要重新安裝或修復相關代理程式。請先交由資訊部門或維護廠商評估。
重要安全提醒:不要把重建 WMI 當成第一步
Microsoft 文件指出,/salvagerepository 會在偵測到不一致時嘗試重建並合併可讀內容,而 /resetrepository 會把 Repository 重設到作業系統初始狀態。Microsoft 也明確提醒,不建議在沒有支援人員指導的情況下重建或重設 WMI Repository。
因此,本文的建議順序是:先更新與重新開機,再執行 DISM、SFC;確認是 WMI 問題後先做一致性檢查;最後才在有備份、了解影響並經專業人員確認後執行完整批次檔。
參考資料
- Microsoft Support:使用 DISM 與 System File Checker 修復系統檔案
- Microsoft Learn:winmgmt 指令與 Repository 選項
- Microsoft Learn:WMI 效能問題與 Repository 重設提醒
如果您不確定錯誤是否與 WMI 有關,或完整流程執行後仍未恢復,請將錯誤畫面、Windows 版本、發生時間及 C:\WMI_Repair_Log.txt 一併提供給技術人員,會比反覆嘗試更快找到原因。