Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите создать батник для выключения компьютера в определенное время.

Михаил Ворнов Знаток (326), на голосовании 1 месяц назад
Нужно чтобы файл добавил сам себя в автозагрузку. Выключаться компьютер должен после 14:17. Программа должна каждую минуту проверять время. Если человек перезагрузил компьютер, то пк должен вырубиться снова и так, пока не настанет 17:00

Есть код, он работает за исключением того, что не добавляется в автозагрузку
 @echo off 
REM Добавляем скрипт в автозагрузку, если его там еще нет
IF NOT EXIST "%ALLUSERSPROFILE%\Start Menu\Programs\Startup\%~nx0" (
COPY %~f0 "%ALLUSERSPROFILE%\Start Menu\Programs\Startup\" > NUL
)

:check_time
REM Проверка времени
for /f "tokens=1-2 delims=: " %%a in ("%time%") do (
if %%a geq 14 (
if %%b geq 17 (
echo Время после 14:17. Компьютер выключится через 60 секунд...
shutdown /s /f /t 60
goto end
)
)
)
echo Время еще не 14:17. Проверка продолжается...

REM Ожидание 60 секунд перед следующей проверкой
timeout /t 60 /nobreak >nul

REM Повторная проверка времени
goto check_time

:end
Голосование за лучший ответ
vostroenteris Мудрец (17296) 2 месяца назад
https://bropk.ru/planirovshhik-zadanij/ тут как отключать в определённое время, делается через встроенный планировщик заданий, без лишних программ

А чтобы добавить в автозагрузку нажать WIN + R вписать shell:startup и перекинуть туда нужный файл
Михаил ВорновЗнаток (326) 2 месяца назад
Так задача в том, что чтобы он сам себя добавлял в автозагрузку. Как вручную ведь ежу понятно
Sergio 2.1 Оракул (67406) 2 месяца назад
Исправленный и улучшенный вариант вашего батника:
 @echo off 
REM Получаем путь к папке автозагрузки текущего пользователя
set "startup=%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup"

REM Проверяем, находится ли скрипт уже в автозагрузке
IF NOT EXIST "%startup%\%~nx0" (
echo Добавление скрипта в автозагрузку...
COPY "%~f0" "%startup%\" > NUL
if %errorlevel% equ 0 (
echo Скрипт успешно добавлен в автозагрузку.
) else (
echo Не удалось добавить скрипт в автозагрузку.
pause
exit /b 1
)
) ELSE (
echo Скрипт уже присутствует в автозагрузке.
)

:check_time
REM Получение текущего времени в формате ЧЧ:ММ
for /f "tokens=1-2 delims=: " %%a in ("%time%") do (
set hour=%%a
set minute=%%b
)

REM Удаляем ведущие нули, если они есть
set /a hour=1%hour%-100
set /a minute=1%minute%-100

REM Проверка, прошло ли время 14:17
if %hour% GTR 14 (
goto shutdown
) else if %hour% EQU 14 if %minute% GEQ 17 (
goto shutdown
) else (
echo Время еще не 14:17. Текущее время: %hour%:%minute%. Проверка продолжается...
)

REM Ожидание 60 секунд перед следующей проверкой
timeout /t 60 /nobreak >nul

REM Повторная проверка времени
goto check_time

:shutdown
echo Время после 14:17. Компьютер выключится через 60 секунд...
shutdown /s /f /t 60
goto end

:end
Похожие вопросы