Загрузить файлы в «/»
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
# winrep
|
||||
|
||||
Простой инструмент для проверки и восстановления системных компонентов Windows 10 и Windows 11.
|
||||
|
||||
## Использование
|
||||
|
||||
1. Скачайте и распакуйте архив.
|
||||
2. Запустите `winrep.cmd` двойным щелчком.
|
||||
3. Подтвердите стандартный запрос UAC.
|
||||
4. Не закрывайте окно до появления итогового результата.
|
||||
5. После завершения откроется папка с логом.
|
||||
|
||||
## Что делает
|
||||
|
||||
`winrep` автоматически:
|
||||
|
||||
- запрашивает права администратора;
|
||||
- запускает `DISM.exe /Online /Cleanup-Image /RestoreHealth`;
|
||||
- затем запускает `sfc.exe /scannow`;
|
||||
- распознаёт основные результаты SFC на русской и английской Windows;
|
||||
- отдельно распознаёт состояние, когда Windows требует перезагрузку перед повторным SFC;
|
||||
- сохраняет основной лог на рабочий стол;
|
||||
- при ошибке DISM сохраняет отдельный подробный DISM-лог;
|
||||
- сообщает, требуется ли перезагрузка или повторная проверка.
|
||||
|
||||
DISM запускается первым, поскольку он восстанавливает хранилище компонентов, которое SFC использует как источник исправных системных файлов.
|
||||
|
||||
## Логи
|
||||
|
||||
Основной файл:
|
||||
|
||||
`Windows_Repair_YYYY-MM-DD_HH-MM-SS.log`
|
||||
|
||||
Если DISM завершается ошибкой, дополнительно сохраняется:
|
||||
|
||||
`Windows_Repair_YYYY-MM-DD_HH-MM-SS_DISM.log`
|
||||
|
||||
## Совместимость
|
||||
|
||||
- Windows 10
|
||||
- Windows 11
|
||||
- Windows PowerShell 5.1, входящий в стандартную поставку Windows
|
||||
|
||||
## Важно
|
||||
|
||||
Не выключайте и не перезагружайте компьютер во время выполнения проверки.
|
||||
|
||||
Если SFC сообщает, что для завершения восстановления требуется перезагрузка, перезагрузите Windows и запустите `winrep.cmd` ещё раз.
|
||||
+267
@@ -0,0 +1,267 @@
|
||||
@echo off
|
||||
setlocal EnableExtensions DisableDelayedExpansion
|
||||
|
||||
:: ============================================================
|
||||
:: winrep - Windows System Repair Tool
|
||||
:: Version 1.2
|
||||
:: Windows 10 / 11
|
||||
:: ============================================================
|
||||
|
||||
title Windows System Repair Tool v1.2
|
||||
chcp 65001 >nul 2>&1
|
||||
|
||||
:: --- Windows check ---
|
||||
ver | findstr /i "Windows" >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
echo.
|
||||
echo [ОШИБКА] Этот файл предназначен только для Windows.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
:: --- Administrator elevation ---
|
||||
net session >nul 2>&1
|
||||
if not "%errorlevel%"=="0" (
|
||||
echo.
|
||||
echo Требуются права администратора.
|
||||
echo Сейчас появится стандартный запрос Windows UAC.
|
||||
echo.
|
||||
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Start-Process -FilePath '%~f0' -Verb RunAs"
|
||||
exit /b
|
||||
)
|
||||
|
||||
:: --- Desktop path ---
|
||||
for /f "usebackq delims=" %%D in (`powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "[Environment]::GetFolderPath('Desktop')"`) do set "DESKTOP=%%D"
|
||||
if not defined DESKTOP set "DESKTOP=%USERPROFILE%\Desktop"
|
||||
|
||||
:: --- Timestamp ---
|
||||
for /f "usebackq delims=" %%T in (`powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Get-Date -Format 'yyyy-MM-dd_HH-mm-ss'"`) do set "STAMP=%%T"
|
||||
|
||||
set "LOG=%DESKTOP%\Windows_Repair_%STAMP%.log"
|
||||
set "DISM_RAW=%TEMP%\winrep_dism_%STAMP%.log"
|
||||
set "DISM_SAVED=%DESKTOP%\Windows_Repair_%STAMP%_DISM.log"
|
||||
set "SFC_RAW=%TEMP%\winrep_sfc_%STAMP%.txt"
|
||||
|
||||
:: --- OS information ---
|
||||
for /f "tokens=2,*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName 2^>nul ^| find /i "ProductName"') do set "PRODUCT=%%B"
|
||||
for /f "tokens=2,*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v DisplayVersion 2^>nul ^| find /i "DisplayVersion"') do set "DISPLAYVER=%%B"
|
||||
for /f "tokens=2,*" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v CurrentBuildNumber 2^>nul ^| find /i "CurrentBuildNumber"') do set "BUILD=%%B"
|
||||
|
||||
cls
|
||||
echo ============================================================
|
||||
echo ПРОВЕРКА И ВОССТАНОВЛЕНИЕ WINDOWS
|
||||
echo winrep v1.2
|
||||
echo ============================================================
|
||||
echo.
|
||||
echo Будут выполнены:
|
||||
echo 1. DISM /Online /Cleanup-Image /RestoreHealth
|
||||
echo 2. SFC /scannow
|
||||
echo.
|
||||
echo Во время проверки НЕ закрывайте это окно.
|
||||
echo Компьютером пользоваться можно, но не перезагружайте его.
|
||||
echo.
|
||||
echo Основной лог:
|
||||
echo "%LOG%"
|
||||
echo.
|
||||
echo ============================================================
|
||||
echo.
|
||||
|
||||
(
|
||||
echo ============================================================
|
||||
echo WINDOWS SYSTEM REPAIR LOG
|
||||
echo winrep v1.2
|
||||
echo ============================================================
|
||||
echo Start: %date% %time%
|
||||
echo Computer: %COMPUTERNAME%
|
||||
echo User: %USERNAME%
|
||||
echo OS: %PRODUCT%
|
||||
echo Version: %DISPLAYVER%
|
||||
echo Build: %BUILD%
|
||||
echo ============================================================
|
||||
echo.
|
||||
) > "%LOG%"
|
||||
|
||||
:: ------------------------------------------------------------
|
||||
:: STEP 1: DISM
|
||||
:: ------------------------------------------------------------
|
||||
echo [1/2] Проверка хранилища компонентов Windows через DISM...
|
||||
echo Это может занять довольно долго.
|
||||
echo Проценты иногда надолго останавливаются на одном значении —
|
||||
echo это нормально.
|
||||
echo.
|
||||
|
||||
(
|
||||
echo ============================================================
|
||||
echo STEP 1 - DISM RestoreHealth
|
||||
echo ============================================================
|
||||
echo Start: %date% %time%
|
||||
) >> "%LOG%"
|
||||
|
||||
DISM.exe /Online /Cleanup-Image /RestoreHealth /LogPath:"%DISM_RAW%"
|
||||
set "DISM_RC=%errorlevel%"
|
||||
|
||||
(
|
||||
echo Exit code: %DISM_RC%
|
||||
echo End: %date% %time%
|
||||
echo.
|
||||
) >> "%LOG%"
|
||||
|
||||
set "DISM_STATUS=ERROR"
|
||||
set "DISM_NEEDS_REBOOT=0"
|
||||
|
||||
if "%DISM_RC%"=="0" (
|
||||
set "DISM_STATUS=OK"
|
||||
del /q "%DISM_RAW%" >nul 2>&1
|
||||
) else if "%DISM_RC%"=="3010" (
|
||||
set "DISM_STATUS=OK_REBOOT"
|
||||
set "DISM_NEEDS_REBOOT=1"
|
||||
del /q "%DISM_RAW%" >nul 2>&1
|
||||
) else (
|
||||
copy /y "%DISM_RAW%" "%DISM_SAVED%" >nul 2>&1
|
||||
del /q "%DISM_RAW%" >nul 2>&1
|
||||
)
|
||||
|
||||
echo.
|
||||
if "%DISM_STATUS%"=="OK" (
|
||||
echo [OK] DISM завершён успешно.
|
||||
) else if "%DISM_STATUS%"=="OK_REBOOT" (
|
||||
echo [OK] DISM завершён успешно, Windows запрашивает перезагрузку.
|
||||
) else (
|
||||
echo [ВНИМАНИЕ] DISM завершился с кодом ошибки %DISM_RC%.
|
||||
echo Проверка SFC всё равно будет выполнена.
|
||||
echo Подробный DISM-лог сохранён отдельно.
|
||||
)
|
||||
|
||||
:: ------------------------------------------------------------
|
||||
:: STEP 2: SFC
|
||||
:: ------------------------------------------------------------
|
||||
echo.
|
||||
echo ------------------------------------------------------------
|
||||
echo.
|
||||
echo [2/2] Проверка системных файлов через SFC...
|
||||
echo.
|
||||
echo Во время этой части процент выполнения не показывается,
|
||||
echo чтобы корректно сохранить и распознать системный вывод.
|
||||
echo Окно может несколько минут выглядеть неподвижным — это нормально.
|
||||
echo.
|
||||
|
||||
(
|
||||
echo ============================================================
|
||||
echo STEP 2 - SFC SCANNOW
|
||||
echo ============================================================
|
||||
echo Start: %date% %time%
|
||||
) >> "%LOG%"
|
||||
|
||||
sfc.exe /scannow > "%SFC_RAW%" 2>&1
|
||||
set "SFC_RC=%errorlevel%"
|
||||
|
||||
:: SFC writes redirected output as UTF-16LE.
|
||||
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ^
|
||||
"$t=[IO.File]::ReadAllText($env:SFC_RAW,[Text.Encoding]::Unicode); $u=New-Object Text.UTF8Encoding($false); [IO.File]::AppendAllText($env:LOG,[Environment]::NewLine+$t+[Environment]::NewLine,$u)" >nul 2>&1
|
||||
|
||||
:: Detect common SFC outcomes on Russian and English Windows.
|
||||
set "SFC_STATUS=UNKNOWN"
|
||||
for /f "usebackq delims=" %%S in (`powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ^
|
||||
"$t=[IO.File]::ReadAllText($env:SFC_RAW,[Text.Encoding]::Unicode); if(($t -match 'Для завершения восстановления системы требуется перезагрузка') -or ($t -match 'system repair pending.*requires reboot') -or ($t -match 'Restart Windows and run sfc again')){'REBOOT_REQUIRED'} elseif(($t -match 'did not find any integrity violations') -or ($t -match 'не обнаружила нарушений целостности')){'CLEAN'} elseif(($t -match 'found corrupt files and successfully repaired them') -or ($t -match 'обнаружила поврежденные файлы и успешно\s+их восстановила') -or ($t -match 'обнаружила поврежденные файлы и успешно восстановила их')){'REPAIRED'} elseif(($t -match 'found corrupt files but was unable to fix some of them') -or ($t -match 'обнаружила поврежденные файлы, но не может восстановить некоторые из них') -or ($t -match 'не удалось восстановить некоторые из них')){'UNREPAIRED'} elseif(($t -match 'could not perform the requested operation') -or ($t -match 'не удается выполнить запрошенную операцию')){'FAILED'} else {'UNKNOWN'}"`) do set "SFC_STATUS=%%S"
|
||||
|
||||
del /q "%SFC_RAW%" >nul 2>&1
|
||||
|
||||
(
|
||||
echo SFC exit code: %SFC_RC%
|
||||
echo SFC result: %SFC_STATUS%
|
||||
echo End: %date% %time%
|
||||
echo.
|
||||
) >> "%LOG%"
|
||||
|
||||
:: ------------------------------------------------------------
|
||||
:: SUMMARY
|
||||
:: ------------------------------------------------------------
|
||||
(
|
||||
echo ============================================================
|
||||
echo SUMMARY
|
||||
echo ============================================================
|
||||
echo DISM: %DISM_STATUS%
|
||||
echo DISM exit code: %DISM_RC%
|
||||
echo SFC: %SFC_STATUS%
|
||||
echo SFC exit code: %SFC_RC%
|
||||
echo End: %date% %time%
|
||||
echo ============================================================
|
||||
) >> "%LOG%"
|
||||
|
||||
echo.
|
||||
echo ============================================================
|
||||
echo ИТОГ
|
||||
echo ============================================================
|
||||
echo.
|
||||
|
||||
if "%DISM_STATUS%"=="OK" (
|
||||
echo DISM: хранилище компонентов проверено/восстановлено успешно.
|
||||
) else if "%DISM_STATUS%"=="OK_REBOOT" (
|
||||
echo DISM: успешно, требуется перезагрузка.
|
||||
) else (
|
||||
echo DISM: ошибка, код %DISM_RC%.
|
||||
)
|
||||
|
||||
if "%SFC_STATUS%"=="CLEAN" (
|
||||
echo SFC: повреждений системных файлов не найдено.
|
||||
) else if "%SFC_STATUS%"=="REPAIRED" (
|
||||
echo SFC: повреждённые системные файлы найдены и исправлены.
|
||||
) else if "%SFC_STATUS%"=="REBOOT_REQUIRED" (
|
||||
echo SFC: проверка отложена — Windows ожидает перезагрузку
|
||||
echo после предыдущей операции восстановления.
|
||||
) else if "%SFC_STATUS%"=="UNREPAIRED" (
|
||||
echo SFC: найдены повреждения, часть файлов восстановить не удалось.
|
||||
) else if "%SFC_STATUS%"=="FAILED" (
|
||||
echo SFC: проверка не смогла завершиться штатно.
|
||||
) else (
|
||||
echo SFC: результат не удалось автоматически распознать.
|
||||
echo Код завершения SFC: %SFC_RC%.
|
||||
)
|
||||
|
||||
echo.
|
||||
|
||||
set "NEEDS_REBOOT=0"
|
||||
if "%DISM_NEEDS_REBOOT%"=="1" set "NEEDS_REBOOT=1"
|
||||
if "%SFC_STATUS%"=="REPAIRED" set "NEEDS_REBOOT=1"
|
||||
if "%SFC_STATUS%"=="REBOOT_REQUIRED" set "NEEDS_REBOOT=1"
|
||||
|
||||
if "%NEEDS_REBOOT%"=="1" (
|
||||
echo РЕКОМЕНДАЦИЯ: перезагрузите компьютер.
|
||||
echo После перезагрузки запустите winrep ещё раз для контрольной проверки.
|
||||
) else if "%SFC_STATUS%"=="UNREPAIRED" (
|
||||
echo РЕКОМЕНДАЦИЯ:
|
||||
echo 1. Перезагрузите компьютер.
|
||||
echo 2. Запустите winrep ещё раз.
|
||||
echo 3. Если проблема останется — передайте лог специалисту.
|
||||
) else if "%SFC_STATUS%"=="FAILED" (
|
||||
echo РЕКОМЕНДАЦИЯ: перезагрузите компьютер и повторите проверку.
|
||||
) else if "%SFC_STATUS%"=="UNKNOWN" (
|
||||
echo РЕКОМЕНДАЦИЯ: передайте основной лог специалисту.
|
||||
) else if not "%DISM_STATUS%"=="OK" (
|
||||
echo РЕКОМЕНДАЦИЯ: передайте логи специалисту.
|
||||
) else (
|
||||
echo Дополнительных действий по результатам этих проверок не требуется.
|
||||
)
|
||||
|
||||
echo.
|
||||
echo Основной лог:
|
||||
echo "%LOG%"
|
||||
|
||||
if "%DISM_STATUS%"=="ERROR" (
|
||||
echo.
|
||||
echo Подробный DISM-лог:
|
||||
echo "%DISM_SAVED%"
|
||||
)
|
||||
|
||||
echo.
|
||||
echo Нажмите любую клавишу, чтобы открыть папку с логами.
|
||||
pause >nul
|
||||
|
||||
explorer.exe /select,"%LOG%" >nul 2>&1
|
||||
|
||||
if "%SFC_STATUS%"=="REBOOT_REQUIRED" exit /b 6
|
||||
if "%SFC_STATUS%"=="UNREPAIRED" exit /b 2
|
||||
if "%SFC_STATUS%"=="FAILED" exit /b 3
|
||||
if "%SFC_STATUS%"=="UNKNOWN" exit /b 4
|
||||
if "%DISM_STATUS%"=="ERROR" exit /b 5
|
||||
exit /b 0
|
||||
Reference in New Issue
Block a user