- Как можно работать с переменными среды %date% и %time% в коммандных файлах Windows .cmd / .bat
- Как изменить системные дату и время
- Изменение системных даты и времени в операционной системе Windows
- Меняем дату и время через параметры даты и времени
- Меняем дату и время через командную строку
- Дата date
- Синтаксис Syntax
- Параметры Parameters
- Примеры Examples
- How to get date / time in batch file
- How to get date and time in a batch file
- Get date from command line
- How to get only the date in MM/DD/YYYY format?
- Get time from command prompt
- Get date and time
- Добавление даты в любом формате в имя файла или папки через cmd
Как можно работать с переменными среды %date% и %time% в коммандных файлах Windows .cmd / .bat
Иногда требуется сформировать переменную даты и времени в cmd / bat скриптах windows так, как нужно нам, а не так, как нам отдаёт операционная система.
Например чтоб добавить эти данные в log файл, для фиксации времени или даты события, создать файл с именем, в котором должны фигурировать данные даты или времени (день, месяц, год, час, минуты, скунды, миллисекунды.) Да мало-ли, какие у нас задачи. Подключаем нашу фантазию 🙂
В следующем примере мы видим разбиение переменных по нужным нам шаблонам.
h- час 2 знака (то есть час будет выдаваться в следующем виде — 01, 02, . 09, . , 12, . 24)
m — минуты 2 знака
s — секунжы 2 знака
ms — миллисекунды 2 знака, почему-то от 0 до 99
dd — день 2 знака
mm — месяц 2 знака
yyyy — год 4 знака
Пример использования переменных %DATE% и %TIME% в скриптах cmd / bat Windows:
@echo off
set h=%TIME:
9,2%
set curtime=%h%:%m%:%s%:%ms%
set dd=%DATE:
3,2%
set yyyy=%DATE:
6,4%
set curdate=%dd%-%mm%-%yyyy%
set curdatetime=%curdate% %curtime%
echo Текущее время — %curdatetime%
В некоторых версиях Windows формат выдачи даты и времени другой, поэтому данный скрипт может работать совсем так как нам нужно.
По идее, подобным способом можно брать части любых переменных, суть в том что формат здесь такой:
Первая цифра после :
— это номер символа, с которого мы начинаем брать значение, вторая цифра это сколько символов захватывать.
Таким образом получается что мы можем взять для своих нужд любую часть, любой доступной нам переменной среды Windows.
Мне известны следующие переменные, значения которых мы можем получить:
Как изменить системные дату и время
Часто мы сталкиваемся с необходимостью сменить системное время и дату. Например, при переходе на летнее время или в поездке в местность с другим часовым поясом. На сегодняшний день переход на летнее в России отменен. Если автоматический переход на летнее время все же производится, нужно снять галочку в настройках даты и времени «Автоматический переход на летнее время и обратно». Однако, операционные системы многих пользователей не обновлены, такой галочки в настройках нет и данный переход осуществляется в автоматическом режиме.
Настройки даты также могут изменяться пользователями при обходе контроля лицензий приложений, если они привязаны к дате, а также при использовании VPN. В этой статье рассмотрим некоторые способы изменения системных даты и времени.
Изменение системных даты и времени в операционной системе Windows
Меняем дату и время через параметры даты и времени
Независимо от версии Windows можно сменить дату и время, щелкнув левой кнопкой мыши по часам в правом нижнем углу либо открыть Панель инструментов. В версиях более ранних, Windows 10, необходимо выбрать «Изменение настроек даты и времени», в Windows 10 для изменения даты и времени необходимо открыть «Параметры даты и времени». При этом может потребоваться ввод пароля администратора системы.
Далее меняете часовой пояс, дату и время на необходимые.
Меняем дату и время через командную строку
Чтобы воспользоваться командной строкой для изменения даты и времени, откройте командную строку с правами администратора. В Windows 7 и более поздних версий просто введите в строке поиска командная строка или cmd, щелкните по результату правой кнопкой мыши и выберите запуск от имени администратора. (подробнее о работе с командной строкой можно прочитать тут).
Команда для изменения времени time ЧЧ:ММ:СС (где ЧЧ – часы, ММ – минуты, СС – секунды), введите ее и нажмите Enter на клавиатуре.
Команда для изменения даты date ДД/ММ/ГГГГ (где ДД – день, ММ – месяц, ГГГГ – год), введите ее и нажмите Enter на клавиатуре.
Параметры даты и времени изменятся моментально, но сохранятся до первой перезагрузки. При следующем включении компьютера или после перезагрузки дата и время вернутся к исходному значению.
Такой способ удобен, если изменение системных даты и времени необходимы для временной настройки в целях обхода лицензии или использования VPN.
Дата date
Отображает или задает системную дату. Displays or sets the system date. Если используется без параметров, Дата отображает текущий параметр системной даты и предлагает ввести новую дату. If used without parameters, date displays the current system date setting and prompts you to enter a new date.
Чтобы использовать эту команду, необходимо быть администратором. You must be an administrator to use this command.
Синтаксис Syntax
Параметры Parameters
Параметр Parameter | Описание Description |
---|---|
Устанавливает указанную дату, где Month — месяц (одна или две цифры, включая значения от 1 до 12), день — день (одна или две цифры, включая значения от 1 до 31), а year — год (две или четыре цифры, включая значения от 00 до 99 или от 1980 до 2099). Sets the date specified, where month is the month (one or two digits, including values 1 through 12), day is the day (one or two digits, including values 1 through 31), and year is the year (two or four digits, including the values 00 through 99 or 1980 through 2099). Необходимо разделить значения для месяца, дня и года с точками (.), дефисами (-) или знаками косой черты (/). You must separate values for month, day, and year with periods (.), hyphens (-), or slash marks (/). |
Примечание. Имейте в виду, что если для представления года используется 2 цифры, то значения 80-99 соответствуют 1980 – 1999. Note: Be aware that if you use 2 digits to represent the year, the values 80-99 correspond to 1980 through 1999.
Примеры Examples
Если расширения команд включены, для вывода текущей системной даты введите: If command extensions are enabled, to display the current system date, type:
Чтобы изменить текущую системную дату на 3 августа 2007, можно ввести любой из следующих элементов: To change the current system date to August 3, 2007, you can type any of the following:
Чтобы отобразить текущую системную дату, после чего появится запрос на ввод новой даты, введите: To display the current system date, followed by a prompt to enter a new date, type:
Для сохранения текущей даты и возврата в командную строку нажмите клавишу Ввод. To keep the current date and return to the command prompt, press ENTER. Чтобы изменить текущую дату, введите новую дату и нажмите клавишу Ввод. To change the current date, type the new date and then press ENTER.
How to get date / time in batch file
This post explains how to get current date and time from command prompt or in a batch file.
How to get date and time in a batch file
Below is a sample batch script which gets current date and time
Datetime.cmd
When we run the above batch file
Get date from command line
To print today’s date on the command prompt, we can run date /t .
Just running date without any arguments prints the current date and then prompts to enter a new date if the user wants to reset it.
In addition to date command, we also have an environment variable using which we can find today’s date.
How to get only the date in MM/DD/YYYY format?
You may want to exclude the day (like ‘Sun’ in the above example) and print only the date in MM/DD/YYYY format. The below command works for the same.
Get time from command prompt
Similar to date command, we have the command time which lets us find the current system time. Some examples below.
As you can see, the command prints the time in different formats. It prints in 12 hour format when /t is added and in 24 hours format without /t
We can also get the current time from environment variables.
Get date and time
Sir I want to get all outdated drivers in our pc through command prompt please help and
reply
Thanks
That last part is so helpful and outstanding! Thank you so much!! 😀
-Matthew
I want the last week date from the current date :-This is the script,I am using for the getting the current date.
for /F “tokens=2” %i in (‘date /t’) do echo %i
05/14/2015
these comments were helpful but how do you make a real time updating clock in 12 hour format in a batch file?
Create a file called realtimeClock.bat.
This is the contents of realtimeClock.bat:
——
@echo off
:getTime
echo The current time is %time%
cls
goto :getTime
——
Run, and enjoy.
Excellent guideline. If the hour (time) is less than 10 then %time% return a space before the hour, so I prefer to use the ‘time /t’ approach.
You can solve that by:
echo %TIME: =0%
(there’s a space between : and =). That will replace the space with a 0
Let’s say you wanted to use the variable to create a filename or log based on the current time:
rem Extract the hour and minute from the time
set TM=%TIME:
3,2%
rem Zero-pad the hour if it is before 10am
set TM=%TM: =0%
echo %TM%
output is:
0803
for 8:03am
I need to get the files based on current date. How ya the script look like. Can someone assist me
how to do this with date and time of a file ?
Why doesn’t it work with “ftime, fdate” ?
please any hint how to do this would be great !
Reply to markus’ question: How to do this with date and time of a file ?
To read the date+time of a file, call DIR in a FOR loop, like so:
FOR /F “tokens=1,2,3,4,*” %%a in (‘DIR “filename.ext”/4 ^| find “/”‘) do set “filedatetime=%%a %%b %%c” & set “filesize=%%d” & set “filename=%%e” & REM Do whatever you want here
Note: There is an apostrophe (single-quote) between the double-quote and the right-paren.
You can, of course, use any switches you want in the DIR command to refine your selection criteria. Type DIR /? for more info.
The FIND command filters the output of DIR to eliminate the header and footer. (DIR /B only lists the filenames, not the dates.)
“tokens=1,2,3,4,*” parses the output into separate variables. The asterisk at the end puts the entire filename (including spaces) into the fifth variable.
how to output date /T and time /T?
like sun 1/1/2017 3:52 PM
Hello, I would need a batch file, with does the Reset function in Date and Time/Change Date and Time/change calendar settings/Reset.
Is it possible to get the date and then use it as an input string in a for loop so that the day can increment
I need a .bat script to change the system date one day ahead, (change it to tomorrow’s date). That’s it.
hello
I need to run a file in a certain date without using wndows Task Scheduler.
how can I do that using batch file?
please help me.
hello
I need to run a file in a certain date without using windows Task Scheduler.
how can I do that using batch file?
please help me.
please answer me through my G-mail
thanks alot
All of the above scripts which call both time and date (or %time% and %date%) suffer from one minor problem: time and date are called separately, so if the script runs just before midnight (a very narrow window, to be sure – at most a few milliseconds), the date could roll over between the two calls and your result would be 24 hours early (i.e. just after midnight on the date that the command started).
Here are 2 solutions:
1.
for /f “tokens=2 delims==” %%I in (‘wmic os get localdatetime /format:list’) do set datetime=%%I
set datetime=%datetime:
8,6%
wmic gets the date + time in an atomic operation, so no rollover is possible.
The second line formats datetime in the form I needed for what I used it for. You can modify this line to format however suits your needs.
2.
:timeloop
set mydate=%date%
set mytime=%time%
if mydate NEQ %date% goto :timeloop
If the date rolls over between the two calls to %date%, just go back and try again.
Добавление даты в любом формате в имя файла или папки через cmd
Добавление даты в имя файла или папки — несложная задача. Интереснее становится, когда дату нужно записать строго в определённом формате. Из этой статьи вы узнаете, как задавать файлам и каталогам имена с датой в любом виде.
На днях мне пришлось решить небольшую задачку по наименованию резервных копий, наименование которых должно было содержать дату в формате yymmdd (две последних цифры года, две цифры месяца и две цифры дня). Используемая для создания резервных копия утилита, однако, такой формат даты в имени не поддерживает. Но поддерживает запуск исполняемых файлов до и/или после процедуры копирования. Поэтому решением стал cmd-файл (ну или bat, как вариант). Вот его пример:
Конечно, я заменил реальные имена файлов на условные. Теперь разберем что к чему. Сразу оговорюсь, что примеры в основном будут касаться файлов, но логика работы с каталогами точно такая же.
Для перевода дат в именах файлов я использовал значение текущей даты в Windows, которое записывается в виде dd.mm.yyyy. При этом отметим, что эта дата это десять символов (точки считаются), которые пронумерованы системой начиная с нуля.
создаёт переменную CURDATE (от current date) и задаёт ей значение текущей даты. Имя переменной можно выбрать произвольно, хватит и любой буквы. Кроме того, переменную можно специально и не задавать, а использовать текущую дату. Но об этом позднее.
Далее идёт команда переименования ren (или rename ). Можно использовать оба варианта написания команды. Синтаксис её выглядит так:
ren [путь_к_файлу]\[старое_имя_файла] [новое_имя_файла]
Ограничением команды rename является то, что при переименовании нельзя указать новый путь к файлу. То есть это именно переименование, а не копирование с новым именем и не перемещение с переименованием. Но, так как мне нужно было только переименовать файлы, этот вариант подходил. Далее также разберем и другие команды.
Теперь непосредственно о команде переименования:
Как видим, мы берем файл primer_%date%.zip из каталога C:\Backups\ для переименования. Например, созданный сегодня файл будет иметь имя primer_07.11.2018.zip, а завтрашний primer_08.11.2018.zip. В нашем случае это ежедневные резервные копии. Новое имя, возможно, выглядит страшно и требует расшифровки.
8,2% — берем два символа из CURDATE , начиная с восьмого;
3,2% — берем два символа из CURDATE , начиная с третьего;
0,2% — берем два символа из CURDATE , начиная с нулевого.
Напомню, что CURDATE представляет собой последовательность из десяти символов, пронумерованных от нуля до девяти, и в общем виде представляет собой текущую дату в виде dd.mm.yyyy. Таким образом, в нашем примере:
два символа с восьмого — 18;
два символа с третьего — 11;
два символа с нулевого — 07.
В итоге, файл primer_07.11.2018.zip превращается в d_181107_primer.zip. Что касается буквы d, то это просто указатель ежедневной копии, который я оставил в примере, чтобы показать, что можно спокойно дописывать любые символы до и после формируемой нами даты.
В конце скрипта очистим значение CURDATE
Переменную можно было и не задавать. Тогда бы мы обошлись одной строкой:
С другой стороны, если Вам не чуждо написание сложных команд, то лучше сразу заиметь привычку оперировать собственными переменными.
Как я уже говорил, вы можете записывать дату в имени файла по своему усмотрению не только при переименовании. Например, команда для создания каталога mkdir (или md ):
Здесь мы обозвали переменную не CURDATE , а просто a . Второй командой мы создали на диске C каталог с именем вида mmdd (месяц, день).
Переименование можно делать и командой move .
Этими командами мы переименовали файл primer.txt в текущем каталоге в файл primer_07_11_2018.txt (при другой дате на календаре, конечно, будет другое имя). Думаю, синтаксис уже должен быть вам понятен: два символа с нулевого, два символа с третьего и четыре с шестого.
Но, вообще, команда move это, конечно, больше про перемещение файлов и папок. Конечно же, задавать имена с датой в любом формате можно и при перемещении.
Кстати, в самом первом примере мы находили нужным нам файл с датой в имени, которая была записана в правильной по российским нормам последовательности dd.mm.yyyy, но ведь она может быть записана и другим способом. Что если в имени файла у нас только месяц и последние две цифры года? А мы хотим поставить сначала год, потом месяц, да ещё и разделить их символом _ для лучшей читаемости.
Как и в команде move , если путь к файлу или каталогу не задан явно, речь идёт о текущем каталоге. Ну и не забывайте очищать значение переменной (на самом деле, переменные, задаваемые командой set , действуют только на протяжении командной сессии, в которой они были заданы 😉 ).