Что означает%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 (без параметров) в командной строке. Текущие переменные среды будут отображены.