Загрузить файлы в «/»

This commit is contained in:
2026-09-08 18:11:41 +00:00
commit 3e3b73a26d
2 changed files with 315 additions and 0 deletions
+48
View File
@@ -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
View File
@@ -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