Найти в Дзене

Командная строка Windows. Часть 2. Batch-file, Планировщик заданий и SchTasks

Оглавление

Разгребаю черновики :)

Что такое пакетные файлы (или batch files), опытным или заставшим DOS пользователям, объяснять не нужно.

Для миллениалов и зумеров неопытных скажу кратко: это текстовые файлы с командами, которые выполняет командная строка.

Создается такой файл легко: пишем в любом текстовом редакторе типа Блокнота нужные нам команды и сохраняем с расширением .bat (более раннее расширение, появившееся еще в DOS) и .cmd (работают в Windows NT, т.е. в любых окнах с 2000 года :)

Мой скрипт для активации Office, ниже про него есть статья :)
Мой скрипт для активации Office, ниже про него есть статья :)

После сохранения вид файла изменится на такой:

Тут другой мой скриптик
Тут другой мой скриптик

Запускается как обычная программа (иногда, если командами меняются какие-то настройки, надо запускать от имени администратора).

Потом его можно изменить, нажав в контекстном меню кнопку "Изменить" (да ладна!).

Зачем они нужны, эти пакетные файлы?

Ну, скрипты удобно использовать для быстрой настройки чего-нибудь.

Приведу в качестве примера один мой эникейский файл для очистки очереди печати принтера (была в работе одна модель, которая постоянно вставала колом, если что-то пошло не так, и не давала нормально очистить очередь печати).

Текст, четно говоря, взят из интернета:

net stop spooler

del %systemroot%\system32\spool\printers\*.shd /F /S /Q

del %systemroot%\system32\spool\printers\*.spl /F /S /Q

net start spooler

Запускать его гораздо быстрее, чем вручную тыкаться в Устройства и принтеры и удалять очередь печати там.

Более интересным применением будет выполнение batch-файл автоматически, по расписанию.

Создать задание можно как с помощью приложения с графическим интерфейсом (Планировщик заданий), так и через CMD (SchTasks.exe). Рассмотрю оба метода :)

Планировщик заданий

Можно найти в Пуске поиском или запустить через Выполнить (Win+R), введя control.exe schedtasks или taskschd.msc .

-3

Увидим что-то вроде такого:

-4

Покажу на примере одной моей задачи: необходимо было периодически сохранять файл журнала Datalog, создаваемый APC PowerChute, из одной папки в другую, попутно добавляя расширение .txt и дату сохранения.

Написала такую простоту: заходит в папку, сохраняет в другую и сообщает об этом.

cd C:\Program Files (x86)\APC\PowerChute Business Edition\agent\

copy Datalog D:\APC_datalog\Datalog_%date:~0,2%_%date:~3,2%_%date:~6%.txt

echo Datalog saved

pause

Если кому интересно, что значит %date:~0,2%, %date:~3,2% и %date:~6%
В Винде дата вызывается словом date и имеет формат ДД.ММ.ГГГГ. В названиях файла лучше точки не оставлять, а использовать разрешенный символ, например, нижнее подчеркивание "_".

Чтобы отделить день, месяц и год, используются унарные операторы:

%переменная:~(с какого символа по счету начать), (сколько символов взять)

Так, день начинается с нулевого символа и занимает два, год начинается с шестого и до конца (поэтому второго числа через запятую нет).

Так, батник заготовили, нажимаем Создать задачу... и пошли пошагово:

Вуаля, вы великолепны!

А теперь более хардовый способ:

Через CMD и SchTasks

Запускаем командную строку и вводим волшебное слово SchTasks - получаем список всех заданий компутера.

-6

Чтобы создать задание, нужно ввести команду в следующем формате (в квадратных скобках - необязательные параметры):

schtasks /Create - создание задания
/SC <scheduletype> - тип задания (MINUTE - каждые х минут, MONTHLY - каждые х месяцев, ONCE - один раз и т.д.)
/TN <taskname> - имя задания
/TR <taskrun> - что запускаем (путь до файла)
[/U <user> ] - запуск с правами указанного пользователя
[/P <password>] - задает пароль для текущего (или введенного в /U пользователя)
[/MO <modifier>]
- модификатор (какой интервал х минут, месяцев и т.д. установлен для задания)
[/D <day>] - в какой день недели выполняется задача (MON, TUE и т.д.) или в какой день месяца (если задача ежемесячная) - от 1 до 31
[/M <month>] - месяцы, в которые выполняется задание (JAN, FEB и т.д.)
[/I <idletime>] - время простоя перед запуском задания
[/ST <starttime>] - время выполнения, формат ЧЧ:ММ
[/RI <interval>] - интервал повторения в минутах
[/K /ET <endtime> | /DU <duration> ] - время окончания выполнения (ЧЧ:ММ) | длительность выполнения (в минутах). Данные ключи несовместимы друг с другом
[/SD <startdate>] - дата первого запуска задания, формат ДД/ММ/ГГГГ
[/ed <enddate>] - дата последнего запуска задания, формат ДД/ММ/ГГГГ
[/z] - удалить задачу, если она не будет повторно выполнена

Создаю свою задачу заново:

schtasks /create /sc WEEKLY /tn APC Datalog save /tr D:\APC_datalog\SaveDatalog.bat /d MON /st 10:00

Еее
Еее

Проверяем, добавилась в каталог:

-8

И немного остального функционала:

Немедленный запуск задания

Вводим: schtasks /run /tn Имя_задания

Фурычит
Фурычит

Остановка выполнения запущенного задания

schtasks /end /tn <taskname>

Изменение существующего задания

schtasks /change /tn <Taskname> ... <те же ключи, что и в Create> ...
[/ENABLE]
или [/DISABLE] - чтобы включить или отключить задание

Удаление задания

schtasks /delete /tn Имя_задания

Больше инфы можно почитать на сайте мелкомягких или введя /? в CMD.

И, напоследок, список моих статей про CMD: