Написание сценариев на основе служб терминалов (часть 12)

Опубликовано: 23 Апреля, 2023

  • Написание сценариев на основе служб терминалов (часть 1)
  • Написание сценариев на основе служб терминалов (часть 2)
  • Написание сценариев на основе служб терминалов (часть 3)
  • Написание сценариев на основе служб терминалов (часть 4)
  • Написание сценариев на основе служб терминалов (часть 5)
  • Написание сценариев на основе служб терминалов (часть 6)
  • Написание сценариев на основе служб терминалов (часть 7)
  • Написание сценариев на основе служб терминалов (часть 8)
  • Написание сценариев на основе служб терминалов (часть 9)
  • Написание сценариев на основе служб терминалов (часть 11)
  • Написание сценариев на основе служб терминалов (часть 14)
  • Вскоре после написания предыдущей статьи из этой серии я понял, что забежал вперед. Я начал писать сценарий в десятой части, но так и не закончил. Поскольку методы, которые я намеревался использовать для завершения сценария в части 10, также будут использоваться в некоторых оставшихся сценариях этой серии, я хочу сделать шаг назад и завершить сценарий, который я начал в части 10..

    Так чего не хватает?

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

    Самая большая проблема с возможностью просмотра или печати предыдущих записей файла журнала заключается в том, что пользователь должен иметь возможность ввести имя файла журнала, который он хочет просмотреть или распечатать. Принятие пользовательского ввода всегда было проблемой для используемого нами пакетного языка сценариев. До выпуска Windows 2000 просто не существовало простого способа принимать пользовательский ввод. Существовали окольные пути принятия пользовательского ввода, а затем действия в соответствии с этим вводом, но кодировать их было очень утомительно. К счастью, Microsoft расширила команду Set, включив переключатель /P. Этот переключатель позволяет назначать пользовательский ввод переменной. Хотя он изначально был частью Windows 2000, он был включен в каждую последующую версию Windows.

    Синтаксис команды довольно прост. Это выглядит так:

    Установить переменную /P=строка подсказки

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

    Чтобы понять, как работает эта команда, взгляните на три строки кода ниже:

    @эхо выключено
    set /P var=введите что-нибудь
    эхо%вар%

    Этот простой сценарий просит пользователя ввести что-то, а затем отображает то, что было введено. В первой строке скрипта мы просто вводим команду @echo off, чтобы удалить беспорядок из вывода скрипта.

    Вторая строка фактически запрашивает ввод данных пользователем. В этом случае я использовал var в качестве переменной, и моя строка подсказки просто говорит «Введите что-нибудь».

    Последняя строка скрипта использует команду echo для отображения содержимого нашей переменной. Обратите внимание, что я заключил переменную в знаки процента.

    Теперь, когда вы знаете, как принимать пользовательский ввод и как ссылаться на переменную, в которую был записан пользовательский ввод, давайте задействуем этот метод в нашем сценарии. Как вы, возможно, помните, поскольку наш скрипт в настоящее время существует, пользователь входит в пункт меню B, чтобы просмотреть предыдущий отчет. После этого скрипт вызывает подпрограмму с именем:sub_view, которая выглядит следующим образом:

    :sub_view
    эхо Вы выбрали просмотр отчета
    for /F «tokens=2,3,4 delims=/» %%i in ('date /t') do set datefile=%%i%%j%%k.log
    Введите %datefile%.log |Дополнительно
    перейти: eof

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

    :sub_view
    эхо Вы выбрали просмотр отчета
    set /P mth=Пожалуйста, введите месяц в формате из двух цифр (от 01 до 12)
    set /p dy=Пожалуйста, введите день создания отчета в двузначном формате (от 01 до 31)
    set /p yr=Пожалуйста, введите год отчета в четырехзначном формате (2008)
    установить datefile=%mth%%dy%%yr%.log
    эхо.
    Введите %datefile% |Подробнее
    перейти: eof

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

    В этом конкретном случае я использовал имя переменной mth для хранения значения месяца. Я использовал dy для хранения значения дня месяца и использовал yr в качестве переменной для года. К сожалению, я не мог просто написать месяц, день и год, потому что это зарезервированные слова, а зарезервированные слова нельзя использовать в качестве имен переменных.

    Как только я закончил принимать пользовательский ввод, я просто соединил переменные с помощью команды set, а затем добавил.log в конец строки переменной, чтобы сформировать имя файла. Затем я присваиваю имя файла переменной с именем datefile. Все это происходит в следующей строке кода:

    установить datefile=%mth%%dy%%yr%.log

    Если вы посмотрите на рисунок А, то увидите, как выглядит сценарий во время его выполнения.

    Изображение 28307
    Рисунок А:

    Вот как сейчас выглядит скрипт, когда он выполняется

    Последнее, о чем я хочу рассказать в этой статье, это пункт меню C, который позволяет нам распечатать отчет. До сих пор мы не написали никакого кода для этой конкретной опции меню. Причина этого в том, что код, который мы будем использовать, почти идентичен коду, который мы используем для просмотра файла журнала. Если вы посмотрите на подпрограмму, с которой мы работали, вы увидите, что предпоследняя строка кода — это та, которая фактически отображает содержимое файла журнала. Сделав одну простую настройку этой строки кода, мы можем перенаправить вывод с экрана на принтер.

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

    Введите %datefile% |Подробнее
    Введите %datefile% >lpt1

    В используемом нами языке пакетного программирования знак > указывает сценарию выполнить перенаправление. LPT1 сказал сценарию выполнить перенаправление на принтер. Однако есть два предостережения, о которых вам нужно знать.

    Во-первых, чтобы этот метод работал, LPT1 должен быть записан на принтер. Во-вторых, некоторым принтерам требуется подача страницы для выполнения задания на печать. Если вы столкнулись с такой ситуацией, вам нужно будет добавить следующую строку кода:

    Эхо.&10ч >lpt1

    Вы можете увидеть завершенный код здесь:

    @эхо выключено
    установить _menu=D
    :Петля
    клс
    Эхо Что ты хочешь сделать?
    Эхо A: Создайте новый отчет о пользователях запросов |
    Эхо B: просмотр предыдущего отчета
    Echo C: распечатать предыдущий отчет
    Эхо.
    Эхо Д: Выйти
    Эхо.

    Установить /P _menu=Пожалуйста, введите свой выбор:

    если не "%_menu%"=="" установить _menu=%_menu:~0,1%
    REM-эхо %_menu%

    Если /i "%_menu%"=="A" перейти к sub_create
    Если /i "%_menu%"=="B" перейти к sub_view
    Если /i "%_menu%"=="C" перейти к sub_print
    если /I "%_menu%"=="D" goto:eof
    перейти: цикл

    :sub_create
    эхо Вы решили создать отчет
    @Эхо выключено
    Эхо Создание лог-файла.
    for /F «tokens=2,3,4 delims=/» %%i in ('date /t') do set datefile=%%i%%j%%k.log
    Запросить пользователя > %datefile%
    Файл эхо-журнала успешно создан.

    перейти: eof

    :sub_view
    эхо Вы выбрали просмотр отчета
    set /P mth=Пожалуйста, введите месяц в формате из двух цифр (от 01 до 12)
    set /p dy=Пожалуйста, введите день создания отчета в двузначном формате (от 01 до 31)
    set /p yr=Пожалуйста, введите год отчета в четырехзначном формате (2008)
    установить datefile=%mth%%dy%%yr%.log
    эхо.
    Введите %datefile% |Подробнее
    перейти: eof

    :sub_print
    эхо Вы выбрали печать отчета
    set /P mth=Пожалуйста, введите месяц в формате из двух цифр (от 01 до 12)
    set /p dy=Пожалуйста, введите день создания отчета в двузначном формате (от 01 до 31)
    set /p yr=Пожалуйста, введите год отчета в четырехзначном формате (2008)
    установить datefile=%mth%%dy%%yr%.log
    эхо.
    Введите %datefile% >lpt1
    Эхо.&10ч >lpt1
    перейти: eof

    Вывод

    В этой статье я показал вам, как принимать и использовать пользовательский ввод в ваших скриптах. В следующей статье я покажу вам, как применить эту концепцию к сценарию, который я начал создавать в Части 11.

    • Написание сценариев на основе служб терминалов (часть 1)
  • Написание сценариев на основе служб терминалов (часть 2)
  • Написание сценариев на основе служб терминалов (часть 3)
  • Написание сценариев на основе служб терминалов (часть 4)
  • Написание сценариев на основе служб терминалов (часть 5)
  • Написание сценариев на основе служб терминалов (часть 6)
  • Написание сценариев на основе служб терминалов (часть 7)
  • Написание сценариев на основе служб терминалов (часть 8)
  • Написание сценариев на основе служб терминалов (часть 9)
  • Написание сценариев на основе служб терминалов (часть 11)
  • Написание сценариев на основе служб терминалов (часть 13)
  • Написание сценариев на основе служб терминалов (часть 14)