Как мне использовать оператор if для получения информации о фидбэке от sfc.exe scannow?

Вопрос или проблема

Я пытаюсь создать *.bat для обслуживания некоторых операционных систем, используя sfc.exe /scannow, который предоставлен Майкрософт в Windows. Процесс возвращает 0 в качестве кода завершения, независимо от того, прошла ли проверка целостности файлов ОС или нет, поэтому я подумываю использовать часть или всю обратную информацию в первой строке в качестве “условного оператора”, чтобы определить, если системные файлы повреждены, показать сообщение вроде “позвоните мне для восстановления системы”, а если все работает хорошо, сделать что-то другое, например, очистить некоторые мусорные папки, начинающиеся с ~1 в C:\Windows\Temp.

Вот что я сделал

@ECHO OFF

title Обслуживание системных файлов.

sc config trustedinstaller start= auto
net start Trustedinstaller

PUSHD %~DP0 & cd /d “%~dp0”
%1 %2
mshta vbscript:createobject(“shell.application”).shellexecute(“%~s0″,”goto :runas”,””,”runas”,1)(window.close)&goto :eof
:runas

start “” /wait /b “C:\Windows\System32\sfc.exe” /scannow

нужна.реальная.помощь.внизу

if “%Condition:~0,0%”==””
mshta vbscript:msgbox(“некоторые системные файлы повреждены и не могут быть восстановлены, пожалуйста, позвоните XXXX для восстановления системы.”,4096,”Проверка системных файлов не выполнена”)(window.close)
) else (
нужна.реальная.помощь.здесь
)

pause >nul

:exit

кстати, я пытался добавить /min после Start, как
start “” /min /wait /b “C:\Windows\System32\sfc.exe” /scannow
я надеюсь, что все окно выполнения будет уменьшено и минимально, но это не работает

Ответ или решение

Чтобы успешно использовать оператор if для получения информации о результатах выполнения команды sfc.exe /scannow в вашем бат-файле, вам нужно учитывать, что sfc.exe вернет текстовую информацию, а не статус завершения, который можно проверить через переменную условия. Разберем, как вы можете это реализовать.

1. Исполнение команды и снятие информации

Чтобы получить результат выполнения команды sfc, вы можете перенаправить вывод команды в текстовый файл. Затем в дальнейшем скрипте вы сможете проверить этот файл на наличие определенных ключевых слов для принятия решения.

@ECHO OFF
title Systemfile Maintenance

:: Запускаем TrustedInstaller
sc config trustedinstaller start= auto
net start TrustedInstaller

PUSHD %~DP0 & cd /d "%~dp0"
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof

:runas
:: Выполняем проверку целостности файлов системы и сохраняем вывод в лог-файл
start "" /wait /b "C:\Windows\System32\sfc.exe" /scannow > C:\Windows\Temp\sfc_results.txt

:: Чтение файла с результатами
setlocal EnableDelayedExpansion
set "result="
for /f "delims=" %%i in (C:\Windows\Temp\sfc_results.txt) do (
    set "line=%%i"
    echo !line! | find "Найдено поврежденных файлов" >nul && set "result=corrupted"
    echo !line! | find "Целостность файлов системы не нарушена" >nul && set "result=ok"
)

:: Проверяем результат
if "!result!" == "corrupted" (
    mshta vbscript:msgbox("Некоторые системные файлы повреждены и не могут быть восстановлены. Пожалуйста, позвоните XXXX для восстановления системы.",4096,"Проверка системных файлов завершилась неудачно")(window.close)
) else (
    :: Здесь вы можете добавить логику для очистки временных файлов
    echo Очищаем временные файлы...
    del /q C:\Windows\Temp\~1*
)

pause >nul
:end

2. Пояснение кода

  • Перенаправление вывода: Использование > для перенаправления результата команды sfc.exe в файл sfc_results.txt. Это позволяет вам позже анализировать вывод.

  • Переменная result: Мы устанавливаем пустую переменную result, которая будет изменяться в зависимости от результата проверки.

  • Цикл for: Этот цикл считывает строки из файла. Мы используем find для поиска определенных фраз в строках. В зависимости от найденного текста, переменной result присваивается значение corrupted или ok.

  • Условия if: После получения результата мы используем оператор if для проверки переменной result и принимаем необходимые меры.

3. Вопрос о минимизации окна

Чтобы минимизировать окно командной строки, вы можете использовать команду start с /min, как показано в вашем примере, однако это не всегда срабатывает для внешних процессов. В данном случае это может зависеть от конкретного окружения Windows.

Заключение

Данный подход позволит вам получать и обрабатывать результаты команды sfc.exe, чтобы эффективно взаимодействовать с пользователем в зависимости от состояния системных файлов. Использование mshta для отображения сообщений также создает удобный интерфейс для взаимодействия с пользователем.

Оцените материал
Добавить комментарий

Капча загружается...