Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Последовательность из трех перезагрузок

Ответить
Настройки темы
CMD/BAT - [решено] Последовательность из трех перезагрузок

(*.*)


Сообщения: 36544
Благодарности: 6691


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Привет, коллеги!

Я соорудил скрипт, который выполняет перезагрузку Windows 7 три раза подряд с 60-секундной задержкой после первых двух перезагрузок. Его будут запускать конечные пользователи, предварительно проинструктированные "ничего не трогать" после запуска

В принципе, он работает, но у меня весьма базовые знания в этом вопросе, так что скрипт, наверное, можно оптимизировать.

reboot.cmd
Код: Выделить весь код
@echo off
set TestDir=%~dp0

:: Проверяется наличие маркерных файлов, создаваемых при перезагрузках
IF NOT EXIST %TestDir%run1.tmp CALL :FirstRun
IF EXIST %TestDir%run2.tmp CALL :LastRun

:: Создание маркерного файла второй перезагрузки
echo>%TestDir%run2.tmp
EXIT

:FirstRun
:: Задание планировщика для выполнения второй перезагрузки и создания маркерного файла
:: Включает вызов этого командного файла для проверки маркеров
Schtasks.exe /Create /RL Highest /TN Reboot /SC ONLOGON /TR "cmd /c shutdown /r /t 60 /c \"This is the shutdown reason\" && call %TestDir%reboot.cmd"
:: Первая перезагрузка
shutdown /r /t 60 /c "This is the shutdown reason"
:: Создание маркерного файла первой перезагрузки
echo>%TestDir%run1.tmp
EXIT

:LastRun
:: Удаление задания из планировщика
Schtasks.exe /Delete /TN Reboot /F
:: Третья перезагрузка
shutdown /r /t 60 /c "This is the shutdown reason"
:: Удаление маркерных файлов
del /q %TestDir%*.tmp
EXIT
Буду признателен за любые отзывы, в т.ч. за "все ок"

Спасибо!

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 20:04, 10-12-2011

 

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1272
Благодарности: 1029

Профиль | Отправить PM | Цитировать


Цитата Vadikan:
Я соорудил скрипт »
Vadikan, если работает, то пускай будет, только пути с участием переменной %TestDir% заключайте в кавычки, а то попадется путь с пробелами и будут сюрпризы.

Цитата Vadikan:
так что скрипт, наверное, можно оптимизировать »
Можно рекурсию применить. И без маркеров. Вот вариант, для боеготовности удалить красное:
Код: Выделить весь код
@Echo Off

If "%~1"=="" (Set Cnt=3) Else (Set Cnt=%~1)
Set /A Cnt-=1
If %Cnt% GEQ 0 (
	Echo schtasks /Create /F /RL Highest /TN Reboot /SC ONLOGON /TR "\"%~f0\" \"%Cnt%\""
	Echo shutdown /r /t 60 /c "This is the shutdown reason"
) Else (
	Echo Schtasks.exe /Delete /TN Reboot /F
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:45, 11-12-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


(*.*)


Сообщения: 36544
Благодарности: 6691

Профиль | Сайт | Отправить PM | Цитировать


Цитата El Sanchez:
только пути с участием переменной %TestDir% заключайте в кавычки, а то попадется путь с пробелами и будут сюрпризы. »
Угу, я поймал это на своем тестировании уже

С рекурсией элегантнее выглядит, конечно. Объясните, пожалуйста, выделенные моменты:
If "%~1"=="" (Set Cnt=3) Else (Set Cnt=%~1)
Set /A Cnt-=1 (минус)
/TR "\"%~f0\"

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 16:29, 11-12-2011 | #3


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1272
Благодарности: 1029

Профиль | Отправить PM | Цитировать


Цитата Vadikan:
If "%~1"=="" (Set Cnt=3) Else (Set Cnt=%~1) »
%1 - первый параметр, переданный в сценарий. Тильда - это модификатор параметра, убирающий двойные кавычки, обрамляюшие параметр. Кавычки при передаче параметров нужны для того, чтобы в случае, если параметр представляет собой какую-нибудь строку с пробелами, сценарий не интерпретировал ее как набор отдельных параметров, разделенных пробелами, а как одно целое. В данном примере, если первый параметр сценария пуст, т.е. сценарий запустили в первый раз, то счетчику Cnt присваиваем значение 3, иначе присваиваем значение первого параметра.

Цитата Vadikan:
Set /A Cnt-=1 (минус) »
Далее счетчик уменьшаем на 1 (см. Set /?), Cnt будет равен 2 и это значение подставляется при создании задачи в виде параметра для сценария, т.е. сколько раз еще нужно перезагрузиться. После первой перезагрузки планировщик запустит сценарий с параметром 2, If "%~1"==" уже ложно, поэтому Set Cnt=%~1, т.е. Сnt=2, далее опять счетчик уменьшается на 1, перезаписывается задание и .т.д. до 0. После 3 перезагрузок параметр сценария будет 0, счетчик станет -1 и сработает Else в If %Cnt% GEQ 0, задание удалится.

Цитата Vadikan:
/TR "\"%~f0\" »
%0 - сам сценарий, %~f0 - полный путь сценария без кавычек (про модификаторы см. For /?)

Вот как все это выглядит (с неудаленными Echo и имитацией работы планировщика):
читать дальше »

Код: Выделить весь код
C:\temp>test.bat
schtasks /Create /F /RL Highest /TN Reboot /SC ONLOGON /TR "\"C:\temp\test.bat\"  \"2\""
shutdown /r /t 60 /c "This is the shutdown reason"

C:\temp>test.bat 2
schtasks /Create /F /RL Highest /TN Reboot /SC ONLOGON /TR "\"C:\temp\test.bat\"  \"1\""
shutdown /r /t 60 /c "This is the shutdown reason"

C:\temp>test.bat 1
schtasks /Create /F /RL Highest /TN Reboot /SC ONLOGON /TR "\"C:\temp\test.bat\"  \"0\""
shutdown /r /t 60 /c "This is the shutdown reason"

C:\temp>test.bat 0
Schtasks.exe /Delete /TN Reboot /F

C:\temp>
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:36, 11-12-2011 | #4


(*.*)


Сообщения: 36544
Благодарности: 6691

Профиль | Сайт | Отправить PM | Цитировать


El Sanchez, все понял, большое спасибо за разбор полетов

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 22:25, 11-12-2011 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Последовательность из трех перезагрузок

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Службы - [решено] Количество перезагрузок службы CaminoDeFlores Microsoft Windows 2000/XP 0 09-08-2010 07:53
Компьютер загружается но изображение появляется после нескольких перезагрузок shtirlits58 Непонятные проблемы с Железом 3 19-01-2010 17:55
Загрузка - меню загрузки трех операционных систем с трех HDD sasa74 Microsoft Windows 7 1 13-11-2009 20:34
Загрузка - Проблема с загрузкой после 3-Х перезагрузок Fa.Er Microsoft Windows Vista 0 31-12-2008 07:21
Загрузка - Есть свежеустановленная Vista x64 SP1. Падает MFT после пары перезагрузок gr0und Microsoft Windows Vista 14 15-09-2008 12:38




 
Переход