Как получить дату в пакетном файле в предсказуемом формате?

I would like to offer a variation to the excellent GetDate.cmd answer of Tex Hex, and use the wmic parameter “/format:list” instead, to assign the values straight away to batch variables, as demonstrated below. To add the leading zeroes, I used another FOR loop, instead of dealing with each variable individually. It’s not much shorter (in total bytes) nor faster, simply a different way of doing it:

I included DayOfWeek, in case someone needs it too.

You can write C++ code using Windows API to create a utility tool for yourself.

Possible reasons to do so:

Assume the utility is mtime. Run mtime mtime in cmd:

The first mtime measures the running time of the second mtime, which fails fast (and can be considered as a “Hello World” program). Result should be 5 ~ 7 ms, and is so close to Measure-Command’s estimation:

If you count process creation time, the result should be about 11 ms. ( Process creation is much slower on Windows than on Linux.)

In my test, the program was compiled with no optimization. If you turn it on, program should be a little bit faster.

Для отображения текущей даты и времени в операционной системе Linux с помощью командной строки используйте команду date или команду timedatectl. Эти команды также могут отображать текущее время / дату в заданном ФОРМАТЕ. Мы также можем установить системную дату и время от имени пользователя root.

Синтаксис

Откройте приложение терминала и введите следующую команду:

Команда Date вернет следующий результат

Вы можете отформатировать дату следующим образом в формате dd-mm-yy:

Простое отображение текущего времени в Linux:

Чтобы вывести дату позавчерашнего дня, выполните:

Хотите узнать день года Рождества в текущем году? Попробуйте:

Выведите полное название текущего месяца и день месяца:

Получение текущего времени в секундах с момента наступления эпохи Linux

Отображение даты и времени в Linux с помощью команды timedatectl

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


Как получить дату в пакетном файле в предсказуемом формате?

Переменная среды TZ

Среда TZ сообщает Linux, в каком часовом поясе вы находитесь. Во многих случаях, когда вы хотите временно изменить часовой пояс. Например, вы можете захотеть вывести текущую дату и время в часовом поясе “America/Los_Angeles”, хотя вы находитесь в “Europe/London”. Чтобы установить TZ, при использовании TCSH/CSH выполните следующую команду:

TZ=”America/Los_Angeles” date
TZ=”Asia/Tokyo” date

Инструмент с графическим интерфейсом

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

Вам может быть предложено ввести пароль администратора (пароль root), это необходимо, так как изменения, сделанные с помощью этого инструмента, повлияют на всю систему.

Как изменить настройки даты и времени в рабочем столе Linux на базе Gnome

Во-первых, вам нужно Настройки в Деятельности, а затем нажмите Детали в боковой панели. Обязательно нажмите Дата и время в боковой панели, чтобы открыть панель:


Как получить дату в пакетном файле в предсказуемом формате?

Заключение

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

man date
man bash
man ksh
man timedatectl

В командной строке Командной строки Windows (CMD) по умолчанию нет возможности создать файла используя текущие дату и время,  для их использования необходимо сначала преобразовать в формат с использованием ограничений в имени файлов.

Стандартными средствами Windows мы не можем организовать ротацию. Можно попробовать использовать переменные %date% и %time%, но содержание в них запрещенных символов, просто вызовет ошибку.


Как получить дату в пакетном файле в предсказуемом формате?

Получаем дату и время

В начале командного файла пишем следующий текст:

:/>  Как ускорить ноутбук на Windows 10. Лучшие программы

set _my_datetime=%date%_%time%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:=_%
set _my_datetime=%_my_datetime:,=_%

В итоге в перемененной %_my_datetime% мы будем иметь текущую дату и время в формате не нарушающем правила именования файлов.

Получаем только дату

Если нужна просто дата то пишем следующее:

set _my_datetime=%date%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:=_%
set _my_datetime=%_my_datetime:,=_%

Ну тут мы просто убрали из переменной переменную времени.

Пример формирования файла с использованием текущей даты и времени в CMD

Пример скрипта использующегося для создания архивов DrWeb CureIt! за сутки с помощью WGET под Windows.

Об этой статье

Эта тема родилась почти два года назад. Нам потребовалось самыми простыми средствами ТОЛЬКО командной строки получит временной слепок в формате ГГГГММДД_ччммсс (Год, Месяц, День, часы, минуты, секунды). В дальнейшем этот слепок предполагалось использовать в именах файлов для предотвращения путаницы в создаваемых однотипных файлах. Решение было найдено и использовалось некоторое время (решение опубликовано в виде статьи Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows). Впоследствии обнаружилась незавершенность алгоритма – ночное и утреннее время (промежуток между 00:00 и 10:00) в зависимости от региональных настроек может содержать ведущий пробел вместо нуля (” 9:59″ вместо “09:59”). Для исправления этой ошибки была добавлена одна строка, и алгоритм заработал вновь. Примерно через год возникла необходимость вернуться к этому алгоритму, и был найден более простой вариант решения проблемы – подстановки даты и времени в имя файла. Появилась заметка Дата и время в имени файла (подстановка стандартными средствами командной строки Windows). В заметке описывается суть нового алгоритма, использующего особенности метода раскрытия переменных и свойства конструкции for /f. Рассмотрим каждый из них в отдельности. В конце будет показан еще один пример использования этой методики.

НедостаткиВначале хотелось бы сказать о существующих недостатках. Есть одна особенность, о которой следует помнить. Этот скрипт хорошо работает даже с таким форматом даты как М/Д/ГГГГ, например для даты 14 февраля 2010. Однако это никогда не проверялось, например, для дат неделей раньше. Об этом сказано в записи от 14 февраля 2009 на странице архива Роба ван дер Вуда. Однако в большинстве случаев это работает.

Раскрытие переменныхКонструкции вида %VAR:str1=str2% указывают интерпретатору раскрыть значение переменной VAR и произвести замену всех подстрок str1 на str2 во всей строке. Это хорошая особенность, которой мы можем воспользоваться – переменная %TIME% может содержать ненужный нам ведущий пробел и нам необходимо заменить его нулем

В данном случае str1 – это пробел, str2 – символ “ноль”. Поэтому между двоеточием и знаком равенства один пробел. На всякий случай аналогичное проделываем и с переменной DATE.

set now=%DATE: =0% %TIME: =0%

Конструкция for /fВ зависимости от региональных настроек порядок элементов даты может варьироваться. Например, у нас принят формат ДД. ММ. ГГГГ, в некоторых англоговорящих странах ММ. ДД. ГГГГ. Для решения нашей проблемы надо выбрать каждую часть времени и отсортировать в нужном нам порядке – разбить строку на части по разделителям (точка “.”, пробел ” “, слеш “/”, запятая “,”, тире “-“, двоеточие “:”), полученные части записать в переменные цикла и сохранить в нужном нам порядке

for /f “tokens=1-7 delims=/-:, ” %%a in ( “%now%” ) do (
set now=%%c%%b%%a_%%d%%e
)

Рассмотрим, как же эта конструкция поможет нам. for /f рассматривает входной поток (текстовая строка. файл на диске или вывод команды). В данном случае это строка, например дата и время создания этой темы 21.01.2010 21:48:50,23 (согласно настроек на моей системе). Эта строка анализируется и разбивается разделителями на отдельные фрагменты (токены). Обратите внимание на пробел в списке разделителей – “/-:., “. Так как входная строка содержит только целочисленную информацию, разделенную разделителями, то в строке всего 7 токенов. Для того чтобы все токены были переданы внутрь цикла указываем количество и список токенов – “tokens=1-7”, то есть все семь – с первого по седьмой. Чтобы все семь токенов попали в цикл на обработку будут выделено семь переменных цикла. В заголовке цикла указано имя первой переменной %%a. Следующие переменные получат последовательно имена %%b, %%c, %%d, %%e, %%f, %%g. В первую переменную %%a попадет первый токен, во вторую, %%b – второй токен, и т.д. И так. В этом примере порядок следующий (работает на моем компьютере, у вас может быть другой) — %%a – день– %%b – месяц– %%c – год– %%d – часы– %%e – минуты– %%f – секунды– %%g – сотыеТак как время 21.01.2010 21:48:50,23 из формата ДД. ММ. ГГГГ чч:мм:сс,сд надо перевести в формат ГГГГММДД_ччмм, надо взять значения переменных из списка выше в следующем порядке– %%c – год– %%b – месяц– %%a – день– %%d – часы– %%e – минуты

:/>  Бут девайс приорити

В результате получим строку вида 20100121_2148.

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

Используем раскрытие переменных с заменой подстроки – берем значение переменной TIME, производим замену пробела нулем и полученную строку сравниваем с заданной строкой времени. Так как сравнение производится лексикографически (википедия), то алгоритм выполнится корректно

if “%TIME: =0%” lss “15:00:00,00” goto end

Is it possible to list all environment variables from a Windows’ command prompt?

Something equivalent to PowerShell’s gci env: (or ls env: or dir env:).

12 gold badges103 silver badges150 bronze badges

asked Mar 16, 2011 at 15:22

15 gold badges92 silver badges98 bronze badges

You can also do SET prefix to see all variables with names starting with prefix.

answered Mar 16, 2011 at 15:24

Jon has the right answer, but to elaborate a little more with some syntactic sugar.

enables you to see the variables one page at a time, rather than the whole lot, or

answered Jul 10, 2013 at 15:26

Fetchez la vacheFetchez la vache

4 gold badges36 silver badges54 bronze badges

To list all environment variables in PowerShell:

Source: Creating and Modifying Environment Variables (Windows PowerShell Tip of the Week)

answered Feb 17, 2015 at 8:03

3 gold badges36 silver badges42 bronze badges

Simply run set from cmd.

Displays, sets, or removes environment variables. Used without parameters, set displays the current environment settings.

answered Mar 16, 2011 at 15:27

10 gold badges85 silver badges129 bronze badges

You can use SET in cmd

To show the current variable, just SET is enough

To show certain variable such as ‘PATH’, use SET PATH.

For help, type set /?

answered Jan 13, 2015 at 6:57

Don’t lose time. Search for it in the registry:

reg query “HKLMSYSTEMCurrentControlSetControlSession ManagerEnvironment”

returns less than the SET command.

answered Feb 6, 2017 at 13:00

As mentioned in other answers, you can use set to list all the environment variables or use

answered Mar 24, 2017 at 4:44

10 gold badges37 silver badges45 bronze badges

If you want to see the environment variable you just set, you need to open a new command window.

Variables set with setx variables are available in future command windows only, not in the current command window. ( Setx, Examples)

answered Dec 5, 2016 at 4:55

Assigning a value/string to an environment variable

The command is set and the parameter is “variable=value”.

The parameter string can be enclosed in double quotes as on all commands as long as command extensions are enabled as by default.

If the double quotes are not used around variable=value, command set interprets everything to end of line after the first equal sign including not visible spaces and horizontal tabs at end of line as string value to assign to the variable.

The name of the variable starts with first non whitespace character (after double quote if used) and ends left to first equal sign. The value assigned to the variable starts right of first equal sign and ends at end of line or last double quote.

:/>  Как открыть файл rar – все возможные способы

set VAR = TEXT

The command line above creates an environment variable with name VARSpace and assigns the string SpaceTEXT to this variable.

Использование

Запуск этого небольшого пакетного кода приводит к выводу:

переменная=текст
переменная = текст
var1=и еще текст
var2=”и еще текст”
var3=”текст с 1 пробелом в конце”
var3=”текст с 1 пробелом в конце” <- Вы видите пробел в конце?

Привет ! <- Откуда берется пространство?

В этом фрагменте кода есть завершающий пробел после Hello.

Привет! <- 3 завершающих пробела выше игнорируются.

Заключать переменную=значение в кавычки можно, даже если сам текст содержит 1 или более двойных кавычек.

Эта строка определяет переменную Quote со значением “. Набор команд интерпретирует все, что находится после первого знака равенства слева до последней двойной кавычки, как значение для присвоения переменной с именем между первой кавычкой и первым знаком равенства.

Назначение переменных с отключенными расширениями команд

Синтаксис команды set “переменная=значение” не может использоваться, если расширения команды отключены с помощью setlocal DisableExtensions в пакетном файле (или в реестре Windows, что очень редко встречается и никогда не встречалось ни на одном компьютере с Windows). Синтаксическая ошибка может возникнуть при выполнении пакетного файла.

Использовать set variable=value можно только с отключенными расширениями команды, при этом значение может содержать также двойные кавычки, и необходимо соблюдать осторожность с пробелами/табуляциями в конце, поскольку они также назначаются переменной среды.

Присвоение переменной с помощью арифметического выражения

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

Использование параметра /A требует включенных расширений команды, так как в противном случае набор команд полностью игнорирует оставшуюся часть строки без какого-либо сообщения об ошибке.

В большинстве случаев не рекомендуется просто присваивать число переменной окружения с помощью арифметического выражения, т.е. с помощью set /A var=1. установить “var=1” или просто установить var=1 (и без пробелов в конце) немного быстрее, потому что переменные среды всегда имеют строковый тип.

В арифметическом выражении пробелы интерпретируются как разделители имен переменных, чисел и операторов. По этой причине набор командной строки /A var = 1 не определяет переменную с именем VARSpace со строкой Space1, как это делает set var = 1. set /A var = 1 определяет переменную с именем VAR со строковым значением 1 после преобразования 1 из строки (пакетный файл содержит 1 как символ с шестнадцатеричным кодовым значением 31) в целое число со значением 1 и обратно в строку с двумя значениями 0x31 и 0x00 (строка, заканчивающаяся нулем).

Присвоение переменной через подсказку

Также использование набора команд с параметром /P изменяет синтаксический анализ
строка после имени переменной и знака равенства. Строка после имени переменной и знака равенства интерпретируется как текст приглашения для вывода, а не как строка для назначения переменной среды.

Использование параметра /P требует включенных расширений команды, так как в противном случае набор команд полностью игнорирует оставшуюся часть строки без какого-либо сообщения об ошибке.

set /P var=”Пожалуйста, введите что-нибудь: ”

В этом случае набор команд автоматически удаляет двойные кавычки вокруг текста приглашения перед печатью для обработки STDOUT (окно консоли, если оно не перенаправлено).

Но и работать тоже:

set /P “var=Пожалуйста, введите что-нибудь: ”

Оставьте комментарий