Jan 04

简而言之如果你的 Windows 10 是 10.0.19042.685 版本(既 20H2)并且安装在固态硬盘上,在升级 KB4592438 后如果运行过 CHKDSK C: /F ,则有极大几率出现系统重启后蓝屏无法进入系统的现象!

解决办法就是进入恢复模式或者 PE,重新执行 CHKDSK C: /F,然后重启。

进阶脚本,特别适配了 Windows 10 新一代的 CHKDSK 参数:

ScanDisk.bat C: D: E: ... (指定扫描修复,最多接 9 个盘符)

:: BatchGotAdmin 
:-------------------------------------
@echo off
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%system32cacls.exe" "%SYSTEMROOT%system32configsystem"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%getadmin.vbs"

    "%temp%getadmin.vbs"
    exit /B

:gotAdmin
    if exist "%temp%getadmin.vbs" ( del "%temp%getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"
    @echo on
:--------------------------------------

:: WindowsVersionChecker (detect OS) 
:--------------------------------------
@ECHO off
REM https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832.aspx
REM 10.0 -- Win 10, Win Server 2016 TP2
REM 6.4 -- Win 10 TP, Win Server 2016 TP1
REM 6.3 -- Win 8.1, Win Server 2012 R2
REM 6.2 -- Win 8, Win Server 2012
REM 6.1 -- Win 7, Win Server 2008 R2
REM 6.0 -- Win Vista, Win Server 2008
REM 5.2 -- Win Server 2003, Win Server 2003 R2, Win XP 64-Bit Edition
REM 5.1 -- Win XP
REM 5.0 -- Win 2000

FOR /f "tokens=4,5,6 delims=[]. " %%a IN ('ver') DO (
    SET WVer=%%a.%%b.%%c
    SET WMajor=%%a
    SET WMinor=%%b
    SET WRev=%%c
)
:--------------------------------------

:: ScanDisk All::PrintInfo  (c) 2015 BSD-Clause 3
:--------------------------------------
@echo off
echo.
echo == ScanDisk All ==
echo   (C) 2014-2015 "" BSD-Clause 3
echo.
echo   This program will run CHKDSK on selected drives in an unattended manner.
echo   CHKDSK will be done in a two-steps way for safer execution.
echo   Supports:
echo     * NTFS
echo     * New generation CKHDSK commands (/scan /perf ...)
echo     * Special treatment of SYSTEM drive (C: as default).
echo       - Includes "sfc /scannow" for check system files integrity.
echo.
echo   Notice that if you system drive is not C:, you MUST change the line:
echo     SET SYSTEM_DRIVE=C:
echo.
echo   Press ANY KEY to continue...
echo.
pause>nul
:--------------------------------------

:: ScanDisk All 
:--------------------------------------
@echo off
REM The System Drive must be specially treated.
SET SYSTEM_DRIVE=C:

REM check Win8+ capabilities (requires WindowsVersionChecker)
if 62 LEQ %WMajor%%WMinor% (set CHKDSK_NG=1) else (set CHKDSK_NG=0)
if %CHKDSK_NG% == 1 (echo Info chkdsk: new capabilities enabled)

REM ^, -- ^ is the escape character for declarations  between '
for %%a in (%*) do (
    echo.
    echo ________________________________________
    if "%%a" == "%SYSTEM_DRIVE%" (
        if %CHKDSK_NG% == 1 (
            echo ### Read-Only ScanDisk of System Drive %%a
            chkdsk /scan /perf /forceofflinefix %%a
            echo ### Run System File Checker on System Drive %%a
            sfc /scannow
        ) else (
            echo Set ### System Drive %%a as dirty to force boot-scandisk scan
            fsutil dirty set %%a
        )
    ) else (
        echo ### Two-steps ScanDisk of unit %%a
        if %CHKDSK_NG% == 1 (
            REM http://www.minasi.com/newsletters/nws1305.htm (chkdsk Win 8+ features)
            chkdsk /scan /perf /forceofflinefix %%a
            chkdsk /X /offlinescanandfix %%a
        ) else (
            REM Old scan (backward compatibility              chkdsk /F /X %%a
            chkdsk /F /X /R /B %%a
        )
    )
)
:--------------------------------------

:: Power off routine 
rem :--------------------------------------
rem @echo off
rem echo Preparing to shutdown..."
rem shutdown /s /t 120
rem echo Press enter to abort shutdown
rem pause > nul
rem shutdown /a
rem echo Shutdown aborted
rem pause
rem :--------------------------------------

ScanDiskAll.bat (扫描修复机器上所有检测到的硬盘,可选扫描后重启)

:: BatchGotAdmin 
:-------------------------------------
@echo off
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%system32cacls.exe" "%SYSTEMROOT%system32configsystem"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%getadmin.vbs"

    "%temp%getadmin.vbs"
    exit /B

:gotAdmin
    if exist "%temp%getadmin.vbs" ( del "%temp%getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"
    @echo on
:--------------------------------------

:: WindowsVersionChecker (detect OS) 
:--------------------------------------
@ECHO off
REM https://msdn.microsoft.com/en-us/library/windows/desktop/ms724832.aspx
REM 10.0 -- Win 10, Win Server 2016 TP2
REM 6.4 -- Win 10 TP, Win Server 2016 TP1
REM 6.3 -- Win 8.1, Win Server 2012 R2
REM 6.2 -- Win 8, Win Server 2012
REM 6.1 -- Win 7, Win Server 2008 R2
REM 6.0 -- Win Vista, Win Server 2008
REM 5.2 -- Win Server 2003, Win Server 2003 R2, Win XP 64-Bit Edition
REM 5.1 -- Win XP
REM 5.0 -- Win 2000

FOR /f "tokens=4,5,6 delims=[]. " %%a IN ('ver') DO (
	SET WVer=%%a.%%b.%%c
	SET WMajor=%%a
	SET WMinor=%%b
	SET WRev=%%c
)
:--------------------------------------

:: ScanDisk All::PrintInfo  (c) 2015 BSD-Clause 3
:--------------------------------------
@echo off
echo.
echo == ScanDisk All ==
echo   (C) 2014-2015 "" BSD-Clause 3
echo.
echo   This program will run CHKDSK on all drives in an unattended manner.
echo   CHKDSK will be done in a two-steps way for safer execution.
echo   The computer will be shutdown after finishing, but can be aborted
echo   by pressing enter.
echo   Supports:
echo     * NTFS
echo     * FAT32
echo     * New generation CKHDSK commands (/scan /perf ...)
echo     * Special treatment of SYSTEM drive (C: as default).
echo       - Includes "sfc /scannow" for check system files integrity.
echo.
echo   Notice that if you system drive is not C:, you MUST change the line:
echo     SET SYSTEM_DRIVE=C:
echo.
echo   Press ANY KEY to continue...
echo.
pause>nul
:--------------------------------------

:: ScanDisk All 
:--------------------------------------
@echo off
REM The System Drive must be specially treated.
SET SYSTEM_DRIVE=C:

REM check Win8+ capabilities (requires WindowsVersionChecker)
if 62 LEQ %WMajor%%WMinor% (set CHKDSK_NG=1) else (set CHKDSK_NG=0)
if %CHKDSK_NG% == 1 (echo Info chkdsk: new capabilities enabled)

REM ^, -- ^ is the escape character for declarations  between '
for /f "skip=1 tokens=1,2 delims= " %%a in ('wmic logicaldisk get caption^,filesystem') do (
	echo.
	echo ________________________________________
	if "%%a" == "%SYSTEM_DRIVE%" (
		if %CHKDSK_NG% == 1 (
			echo ### Read-Only ScanDisk of System Drive %%a
			chkdsk /scan /perf /forceofflinefix %%a
			echo ### Run System File Checker on System Drive %%a
			sfc /scannow
		) else (
			echo Set ### System Drive %%a as dirty to force boot-scandisk scan
			fsutil dirty set %%a
		)
	) else if "%%b" == "NTFS" (
		echo ### Two-steps ScanDisk of %%b unit %%a
		if %CHKDSK_NG% == 1 (
			REM http://www.minasi.com/newsletters/nws1305.htm (chkdsk Win 8+ features)
			chkdsk /scan /perf /forceofflinefix %%a
			chkdsk /X /offlinescanandfix %%a
		) else (
			REM Old scan (backward compatibility  			chkdsk /F /X %%a
			chkdsk /F /X /R /B %%a
		)
	) else if "%%b" == "FAT32" (
		echo ### Two-steps ScanDisk of %%b unit %%a
		chkdsk /F /X %%a
		chkdsk /F /X /R %%a
	)
)
:--------------------------------------

:: Power off routine 
rem :--------------------------------------
rem @echo off
rem echo Preparing to shutdown..."
rem shutdown /s /t 120
rem echo Press enter to abort shutdown
rem pause > nul
rem shutdown /a
rem echo Shutdown aborted
rem pause
rem :--------------------------------------

参考:

https://borncity.com/win/2020/12/18/windows-10-20h2-chkdsk-damages-file-system-on-ssds-with-update-kb4592438-installed/