Эта статья рассказывает, какие возможности имеются в командном файле для привлечения внимания пользователя в случае какого-либо события или ошибки. Команды ECHO во многих случаях недостаточно, ведь это просто вывод текста, а хотелось бы, чтобы:

  • уведомление было заметным пользователю, даже если он в это время работает в другой программе
  • был удобный выбор для пользователя, какое действие bat файл должен сделать дальше
  • информация была наглядной, например, чтобы была видна серьёзность события (ошибка или просто информация)


В современных решения пользовательского интерфейса Windows уведомление работает не так, что окно внезапно выскакивает поверх всех, прерывая работу пользователя, теперь происходит вежливое мигание значком программы или командного файла на панели задач. Поэтому пользователь может спокойно продолжить свою работу, например, закончить какой-то документ, а затем щелкнуть по значку и посмотреть, что же там случилось.

Поднять окно командного файла

Чтобы поднять наверх окно командного файла, можно использовать возможности WSH: скрипт activate.js использует метод WshShell.AppActivate для окна, заголовок которого передаётся параметром командной строки:

var title = WScript.Arguments.Unnamed(0);
var wshshell = WScript.CreateObject("WScript.Shell");
wshshell.AppActivate(title);

Затем в командном файле устанавливаем заголовок окна и в нужный момент вызываем activate.js:

@echo off
set window_title=Мой bat файл
title %window_title%
rem Здесь выполняются команды...
if errorlevel 1 cscript //nologo activate.js "%window_title%" & pause

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

Этот скрипт можно переписать на VBScript.

Для наглядности будет полезно выделить цветом информацию о событии, например, об ошибке – красным цветом, о предупреждении – жёлтым и т.д..

Кроме этого, потребуется запрограммировать в bat файле выбор действия пользователем: с помощью pause для просто подтверждения, timeout для подтверждения с таймаутом или set /p для ввода значения.

В современных версиях Windows окно при выполнении этой команды окно не поднимается наверх, вместо этого начинает мигать значок на панели задач.

Показать всплывающее сообщение

Всплывающее сообщение MessageBox содержит текст со значком, это выглядит нагляднее, чем просто текст в консольном окне. Ещё в окне MessageBox могут быть различные сочетания кнопок (Да-Нет, ОК-Отмена и другие сочетания), с помощью которых пользователь может сделать свой выбор о выполняемых действиях.

Всплывающее окно WshShell.Popup

Этот вариант использует возможности WSH и не требует установки  дополнительных программ.
Используется метод WshShell.Popup в скрипте popup.js

var text = WScript.Arguments.Unnamed(0);
var title = WScript.Arguments.Unnamed(1);
var wshshell = WScript.CreateObject("WScript.Shell");
wshshell.Popup(text,0,title,16);

Соответственно, командный файл вызывает его в случае ошибки:

cscript //nologo popup.js "Сбой процедуры полного резервного копирования. Сервер недоступен." "Резервное копирование"

Всплывающее окно NHMB

Программа nhmb также показывает всплывающее окно с выбором значка и кнопок, с возможностью задавать символы перевода строки, а также с отображением таймера в заголовке окна.

nhmb.exe "Сбой процедуры полного резервного копирования.\nСервер недоступен." "Резервное копирование" error 60


В заголовке окна отображается время в секундах (55), оставшееся до автоматического закрытия окна и продолжения работы командного файла.

Все параметры всплывающего окна задаются в командной строке, и для удобства на странице программы есть генератор строки запуска, который формирует всю строку по требуемым условиям – нет необходимости разбираться в справке и тестировать команды, достаточно выбрать желаемое отображение и скопировать готовую строку в свой bat файл.

Онлайн генератор строки запуска программы nhmb на странице программы

Сравнение

Скрипт AppActivateСкрипт PopupПрограмма nhmb
Значокнетдада
Заголовокнетдада
Сообщение в несколько строкдадада
Команды с простым выборомнетдада
Команда по умолчанию с таймеромнетесть, но таймер не отображаетсяесть, таймер отображается
Режим таймера без кнопокнетнетда
Требуется программированиедаданет

Узнать больше

Файлы для скачивания

Наши соцсети

Сообщение пользователю в cmd
Метки:         

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *