Что означает%date:~-4,4%%date:~-10,2%%date:~-7,2%_% времени:~0,2%% времени:~3,2%?

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

set fileName=db_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%.bak

Что значит %date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2% имею в виду?

2 ответа

Решение

Открытие в окне командной строки и запуск там set /? выводит справку по команде SET.

На последней странице справки объясняется, что %DATE% расширяется до текущей даты локали и %TIME% к текущему времени локали при разборе строки, содержащей эти ссылки на переменные среды.

Формат даты и времени зависит от региона Windows и языковых настроек. Поэтому необходимо выполнить в окне командной строки

echo Date is: %DATE%
echo Time is: %TIME%

или в качестве альтернативы

echo %DATE% %TIME%

Лучше всего выполнять до 10:00 утра, чтобы узнать формат строки даты и времени локали. Дата с днем ​​недели? Каков порядок дня, месяца и года в строке даты? Время в 12 или 24 часовом формате? Всегда ли время с двузначным часом?

И в справке по выводу команды SET объясняется также %Variable:~X,Y% получить подстроку строки переменной окружения из позиции X в строке с Y длина символов.

Первый символ в строке имеет номер позиции (индекс символа) 0,
Отрицательное значение для X средства X символы с конца строки (с правой стороны).

set fileName=db_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%.bak

определяет переменную с именем fileName

  • начиная с фиксированной строки db_,
  • добавление с %date:~-4,4% последние 4 символа текущей даты локали, которая, очевидно, является годом,
  • добавление с %date:~-10,2% десятый и девятый символы справа от текущей даты локали, которая, скорее всего, является месяцем,
  • добавление с %date:~-7,2% седьмой и шестой символы справа от текущей даты локали, которая, скорее всего, является днем,
  • добавление подчеркивания в качестве разделителя между датой в формате YYYYMMDD и время в формате HHmm,
  • добавление с %time:~0,2% первые 2 символа текущего локального времени, которое, очевидно, является часом,
  • добавление с %time:~3,2% четвертый и пятый символы текущего локального времени, которое, очевидно, является минутой и
  • добавление расширения файла .bak,

Результат определения этой переменной с несколькими подстроками можно проверить, выполнив в окне командной строки:

echo db_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%.bak

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

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

Например;

SET PATH =% PATH%; C:\MyStuff

Выше добавлено C:\MyStuff к Path.

SET FRIEDRICE = ДА

Это создает переменную среды с именем FRIEDRICE и устанавливает значение YES.

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

В старые добрые времена AUTOEXEC.BAT часто использовался для настройки базовой операционной среды.

РЕДАКТИРОВАТЬ

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

Другие вопросы по тегам