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

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

Если вы хотите прочитать другие части этой серии статей, перейдите по ссылке:

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

    Создание имен файлов на основе даты

    Как вы помните, в предыдущей статье мы создали следующий скрипт:



    Файл эхо-журнала успешно создан.

    Первые две строчки этого скрипта довольно короткие и сухие. Команда @Echo Off указывает сценарию не отображать команды по мере их выполнения, а команда Echo Create Log File указывает сценарию отображать фразу Создание файла журнала. Однако в третьей строке сценария все становится действительно интересным. Это строка, в которой мы создаем имя файла.

    Как видите, команда начинается с команды For. Я еще не говорил о команде For, потому что она не имеет прямого отношения к службам терминалов, но это хорошая команда для понимания, поскольку она позволяет создавать более мощные сценарии.

    Если вы посмотрите на строку кода ниже, вы заметите, что команда For состоит из двух основных частей. Есть раздел For и раздел Do. В разделе «Для» задаются критерии, которым вы должны соответствовать. Раздел Do выполняет другую команду после того, как будут выполнены критерии, указанные в разделе for.

    В данном конкретном случае раздел For команды выглядит так:

    Раздел Do выглядит следующим образом:

    По сути, раздел Do использует команду Set для заполнения переменной с именем Datefile именем файла, сгенерированным разделом For команды.

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

    Раздел «Для»

    А пока давайте просто полностью забудем о части команды Do и сосредоточимся на разделе For, показанном ниже:

    Эта команда в основном делает импорт определенных токенов при выполнении команды DATE /T. Конечно, это поднимает несколько вопросов, например, что делает DATE /T и что такое токен?

    Если вы посмотрите на рисунок A, вы увидите, где я вручную выполнил команду DATE /T. Как видно на рисунке, эта команда просто отображает день недели, а затем месяц, день и год в числовом формате. Как вы помните, мы используем часть этой информации для создания имени файла, но мы, конечно же, не можем создать имя файла, используя эту информацию в необработанном виде.


    Рисунок A: Вот как это выглядит, когда вы вручную вводите команду DATE /T

    Здесь в игру вступает концепция токенов. Обратите внимание на слово IN непосредственно перед командой DATE /T. Это сообщает команде For, что мы извлекаем информацию из команды DATE /T. Когда мы это делаем, Windows обрабатывает каждый отдельный фрагмент информации как токен. В этом случае считываются четыре отдельных токена. Вот эти токены:

    • Солнце

    • 05

    • 11

    • 2008 г.

    Теперь вы могли заметить, что когда я вручную ввел команду DATE /T, Windows отобразила фактическую дату как одну непрерывную строку информации (11.05.2008), а не как отдельные фрагменты информации (05, 11, 2008). Причина, по которой эту строку текста можно рассматривать как три отдельных токена, заключается в том, что мы можем указать разделитель. Разделитель сообщает команде, что каждый раз, когда она встречает определенный символ, она должна рассматривать текст, следующий за этим символом, как отдельный токен.

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

    Первая часть этой команды (delims=/) сообщает Windows, что разделителем является символ /. Это то, что разбивает строку текста на три отдельных токена. Часть команды %%i присваивает токен переменной с именем %%I.

    Теперь взгляните на часть команды Tokens=:

    Эта часть команды сообщает Windows о захвате второго, третьего и четвертого маркеров. В этом случае первым токеном является Sun, который представляет собой часть выходных данных, которая нас не интересует, поэтому мы полностью игнорируем ее. Второй токен — 05, и мы помещаем это значение в переменную с именем %%I. Теперь вы могли заметить, что мы захватываем два дополнительных токена (3 и 4), но больше никаких переменных мы не объявляли. Преимущество этой команды в том, что нам это не нужно. Windows рассматривает %%I как отправную точку. Он будет автоматически использовать %%J в качестве переменной для хранения значения токена номер 3 и %%K в качестве значения для хранения токена номер 4.

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

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

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

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

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

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


    Рисунок B. Этот пример сценария показывает, как используются токены и переменные.

    Теперь вернемся к нашему исходному скрипту, показанному ниже:

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

    Вывод

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

    Если вы хотите прочитать другие части этой серии статей, перейдите по ссылке:

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