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

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

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

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

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

Ближе к концу моей предыдущей статьи я предложил две строки кода ниже в качестве механизма для создания файлов журнала с уникальными именами:

for /F «tokens=2,3,4 delims=/» %%i in ('date /t') do set datefile=%%i%%j%%k.log
Запросить пользователя > %datefile%

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

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

Прежде чем я покажу вам, как работают приведенные выше команды, давайте посмотрим, как эти команды работают в реальной среде. Как вы можете видеть на рисунке A, я создал текстовый файл с именем USER.BAT, а затем включил в него приведенные выше команды. Если вы не знакомы с расширением.BAT, файлы.BAT известны как пакетные файлы. Пакетные файлы — это просто текстовые файлы, содержащие одну или несколько команд. Назначение пакетного файла — позволить вам создавать сценарии на основе команд, которые обычно приходится вводить по отдельности в командной строке.


Рисунок А:

Вот как команды работают в реальном мире

Если вы посмотрите на рисунок выше, вы увидите, что первое, что я сделал, это использовал команду TYPE для отображения содержимого файла USER.BAT. Этот шаг на самом деле не является необходимым, я просто сделал это, чтобы показать вам, что я использую тот же код, что и в предыдущей статье.

Обратите внимание, что в следующей командной строке я ввел команду USER. Каждый раз, когда вы создаете пакетный файл, имя, присвоенное вам пакетному файлу, обрабатывается так, как если бы оно принадлежало исполняемому файлу. В этом случае имя моего пакетного файла — USER.BAT, поэтому, когда я ввожу команду USER, Windows запускает пакетный файл.

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

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

Запросить пользователя > %datefile%

Однако, когда пакетный файл обрабатывает команду Query User, команда выглядит следующим образом:

Запросить пользователя 1>04122008.log

Я хочу сказать, что, хотя пакетные файлы предназначены для последовательного выполнения команд, как если бы они были напечатаны, есть одно важное различие между командой пакетного файла и командой, которая была введена вручную. Когда вы обрабатываете команды как часть пакетного файла, у вас есть возможность основывать команду на результатах предыдущей команды. В этом случае переменная %datefile% заменяется на 04122008. Если вам интересно, откуда взялось это число, то оно было создано на основе сегодняшней даты, 12 апреля 2008 г. или 04-12-2008.

Как вы можете видеть на снимке экрана, я смог использовать дату для создания имени файла. В нижней части снимка экрана я использовал команду TYPE, чтобы отобразить содержимое созданного мной файла журнала, просто чтобы доказать, что этот метод работает.

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

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

@эхо выключено

Echo — это команда, которая обычно используется для отображения текста на экране или для добавления строки текста в файл. Например, если вы хотите настроить пакетный файл для отображения фразы Hello World, вы можете использовать следующую команду:

Эхо привет мир

Мы будем использовать команду echo для отображения текста в оставшейся части этой серии статей, но сейчас есть еще одно применение echo, о котором я хочу вам рассказать. Когда вы вводите команду ECHO OFF, она сообщает Windows, что вы хотите запретить отображение оставшихся команд пакетного файла и что вы хотите видеть только вывод пакетного файла, а не сами команды.

Если вы просто введете команду ECHO OFF в начале командного файла, сама команда Echo Off будет видна, а другие команды — нет. Вы можете понять, что я имею в виду, если посмотрите на рисунок B.


Рисунок Б:

Команда Echo Off предотвращает отображение остальных команд.

Использование команды Echo Off работает, но появление слов Echo Off немного отвлекает. Поэтому я рекомендую вам предварять команду Echo Off знаком @. Это предотвратит повторение команды Echo Off, как показано на рисунке C.


Рисунок С:

Команда @Echo Off скрывает все команды.

Итак, команда @Echo Off хорошо скрывает отдельные команды, составляющие пакетный файл, но для случайного наблюдателя это выглядит так, как будто ничего не происходит. Мы можем исправить эту «проблему», добавив в пакетный файл команду Echo, за которой следует строка текста, объясняющая, что происходит. Мы даже можем создать еще одну строку в конце файла, в которой используется команда Echo, чтобы сообщить пользователю об успешном выполнении команды. Такой скрипт может выглядеть примерно так:

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

Вы можете увидеть, как выглядит результат этого скрипта на рисунке D.


Рисунок D:

Вот как выглядит вывод скрипта выше

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

Вывод

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

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