sfc / DISM - システムファイルを修復する

にメンテナンス済み

Windows の動作が不安定なときや、設定やスタートメニューなどの標準機能が正常に動作しないときに試したいのが、システムファイルチェッカー(sfc) です。保護されている Windows のシステムファイルを検査し、壊れていたり書き換えられていたりした場合は正しいバージョンに置き換えます。

sfc で直らない場合は、修復元となるコンポーネントストア自体を直す DISM コマンドを組み合わせます。この記事では、両方の使い方と実行順序を解説します。

事前準備:管理者として実行する

sfc と DISM は、管理者として実行したコマンドプロンプトでのみ動作します。通常の権限で実行すると、「管理者としてコンソール セッションを実行している必要がある」という趣旨のエラーが表示され、スキャンは始まりません。

管理者として起動する方法は、

を参照してください。

sfc の基本構文

sfc [/scannow] [/verifyonly] [/scanfile=<ファイル>] [/verifyfile=<ファイル>]
    [/offbootdir=<ドライブ> /offwindir=<Windowsフォルダー>] [/offlogfile=<ログファイル>]
オプション説明
/scannowすべての保護ファイルを検査し、問題があれば修復する
/verifyonlyすべての保護ファイルを検査するだけで、修復はしない
/scanfile=<ファイル>指定した 1 つのファイルを検査し、問題があれば修復する(フルパスで指定)
/verifyfile=<ファイル>指定した 1 つのファイルを検査するだけで、修復はしない(フルパスで指定)
/offbootdir /offwindir起動していない Windows を修復対象にする(回復環境などから実行するとき。両方の指定が必要)
/offlogfile=<ログファイル>オフライン修復時のログの出力先を指定する

システム全体を検査・修復する

sfc /scannow

実行すると、検査の進行状況が「検証 xx% が完了しました。」と表示されます。環境によっては数十分から 1 時間以上かかるため、途中でウィンドウを閉じたり、PC を終了したりしないでください。

進行状況が止まって見えても中断しない

特定の割合で長時間止まっているように見えることがありますが、処理は続いています。しばらく待っても終わらない場合を除き、強制終了は避けてください。

結果メッセージの読み方

終了すると、次のいずれかのメッセージが表示されます。

メッセージ(要旨)意味と次の対応
Windows リソース保護により、整合性違反は検出されませんでした。システムファイルに問題はありません。別の原因を調べます。
Windows リソース保護により、破損したファイルが見つかり、正常に修復されました。修復完了です。PC を再起動して状況を確認します。
Windows リソース保護により、破損したファイルが見つかりましたが、一部は修復できませんでした。次の「DISM で修復元を直す」に進みます。
Windows リソース保護は、要求された操作を実行できませんでした。修復を実行できなかった状態です。セーフ モードで再実行します。それでも失敗する場合は、C:\Windows\WinSxS\Temp に PendingDeletes と PendingRenames フォルダーがあるか確認します。回復環境から実行する場合は /offbootdir と /offwindir を指定します。
チェック

修復後は、念のため sfc /scannow をもう一度実行して「整合性違反は検出されませんでした」と表示されることを確認すると安心です。

修復せずに検査だけ行う

システムを変更せずに状態だけ知りたい場合は、/verifyonly を使います。

sfc /verifyonly

特定のファイルだけを検査・修復する

破損しているファイルが分かっている場合は、フルパスで指定できます。

1つのファイルを検査して修復
sfc /scanfile=C:\Windows\System32\kernel32.dll
1つのファイルを検査だけする
sfc /verifyfile=C:\Windows\System32\kernel32.dll

詳細をログで確認する

sfc の詳細は、C:\Windows\Logs\CBS\CBS.log に記録されます。このファイルは非常に大きいため、sfc に関する行([SR] が付いた行)だけを取り出すと読みやすくなります。

sfc
findstr /c:"[SR]" "%windir%\Logs\CBS\CBS.log" > "%userprofile%\Desktop\sfcdetails.txt"

> はリダイレクトで、出力をファイルに書き込みます。詳しくは

を、findstr についてはを参照してください。

ログは [SR] で絞り込む

sfc 以外の処理も同じログに記録されるため、[SR] で絞り込まない状態では目的の行を探しにくくなります。

sfc で直らないとき:DISM で修復元を直す

sfc は、コンポーネントストア(C:\Windows\WinSxS)に保存されているファイルを使って修復します。このコンポーネントストア自体が壊れていると、sfc は修復できません。その場合は、DISM(Deployment Image Servicing and Management)でコンポーネントストアを修復します。

DISM /Online /Cleanup-Image /RestoreHealth
コマンド内容
DISM /Online /Cleanup-Image /CheckHealth破損が記録されているかを素早く確認する(修復はしない)
DISM /Online /Cleanup-Image /ScanHealthコンポーネントストア全体を検査する(修復はしない)
DISM /Online /Cleanup-Image /RestoreHealth検査して、破損があれば修復する

/RestoreHealth は、既定では Windows Update から修復用のファイルを取得するため、インターネット接続が必要です。完了までに時間がかかり、進行状況の割合が途中で止まって見えることもあります。

実行順序

Microsoft は、DISM で修復元を直してから sfc を実行する順序を案内しています。一方、まず sfc を試し、直らなかった場合に DISM へ進み、最後にもう一度 sfc を実行する方法もあります。どちらでも、最終的に sfc /scannow で問題が解消したことを確認します。

DISM を先に行う場合の手順は次のとおりです。

  1. DISM /Online /Cleanup-Image /RestoreHealth を実行する
  2. 完了したら sfc /scannow を実行する
  3. 再起動して、症状が改善したか確認する
管理者として実行したコマンドプロンプトで順に実行
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow
ネットワークに接続できない環境では

Windows Update に接続できない環境では、/Source オプションで正常な Windows のイメージを修復元に指定できます。たとえば /Source:WIM:X:\sources\install.wim:1 のように指定し、Windows Update に接続させない場合は /LimitAccess を併用します。使用するイメージは、現在インストールされている Windows とバージョン・エディション・言語を合わせる必要があります。

バッチファイルから実行する

管理者権限で動くバッチファイルにまとめておくと、手順を毎回入力せずに済みます。

repair-system.cmd
@echo off
net session >nul 2>&1
if errorlevel 1 (
    echo 管理者として実行してください。
    pause
    exit /b 1
)

echo === DISM による修復元の検査・修復 ===
DISM /Online /Cleanup-Image /RestoreHealth

echo.
echo === sfc によるシステムファイルの検査・修復 ===
sfc /scannow

echo.
echo 完了しました。結果を確認し、必要に応じて再起動してください。
pause

net session は管理者権限がないと失敗するため、権限の簡易チェックとして使われます。ただし、Server サービスが停止している環境では、管理者でも失敗することがあります。管理者権限で自動的に再起動する方法は、

を参照してください。

日本語を含むバッチファイルの文字コード

上のバッチファイルは echo に日本語を含むため、UTF-8 で保存するとコマンドプロンプトで文字化けすることがあります。Shift_JIS(ANSI)で保存するか、先頭付近に chcp 65001 >nul を追加してください。詳しくは

を参照してください。

DISM の詳細なログは C:\Windows\Logs\DISM\dism.log に記録されます。失敗した場合はこちらも確認してください。

まとめ

やりたいことコマンド
システムファイルを検査して修復するsfc /scannow
検査だけして修復はしないsfc /verifyonly
特定のファイルだけ検査・修復するsfc /scanfile=フルパス
sfc の詳細ログを取り出すfindstr /c:"[SR]" "%windir%\Logs\CBS\CBS.log"
修復元(コンポーネントストア)を修復するDISM /Online /Cleanup-Image /RestoreHealth

関連記事

練習問題

練習問題

sfc /scannow で「一部は修復できませんでした」と表示されたとき、最初に試す対応として適切なものはどれですか?

正しいものを 1 つ選んでください。

  1. 管理者として DISM /Online /Cleanup-Image /RestoreHealth を実行し、その後もう一度 sfc /scannow を実行する
  2. sfc /verifyonly を繰り返し実行して、自動的に修復されるのを待つ
  3. C:\Windows\WinSxS フォルダーを手動で削除する
#コマンドプロンプト #コマンドライン #コマンド #sfc #DISM #管理者権限 #トラブルシューティング