Cmd date в имени файла

Имена

Добавление даты в любом формате в имя файла или папки через 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. В нашем случае это ежедневные резервные копии. Новое имя, возможно, выглядит страшно и требует расшифровки.

Напомню, что CURDATE представляет собой последовательность из десяти символов, пронумерованных от нуля до девяти, и в общем виде представляет собой текущую дату в виде dd.mm.yyyy. Таким образом, в нашем примере:

Читайте также:  Совместимость по фамилии имени отчеству бесплатно в любви

два символа с восьмого — 18;

два символа с третьего — 11;

два символа с нулевого — 07.

В итоге, файл primer_07.11.2018.zip превращается в d_181107_primer.zip. Что касается буквы d, то это просто указатель ежедневной копии, который я оставил в примере, чтобы показать, что можно спокойно дописывать любые символы до и после формируемой нами даты.

В конце скрипта очистим значение CURDATE

Переменную можно было и не задавать. Тогда бы мы обошлись одной строкой:

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

Как я уже говорил, вы можете записывать дату в имени файла по своему усмотрению не только при переименовании. Например, команда для создания каталога mkdir (или md ):

Этими командами мы переименовали файл primer.txt в текущем каталоге в файл primer_07_11_2018.txt (при другой дате на календаре, конечно, будет другое имя). Думаю, синтаксис уже должен быть вам понятен: два символа с нулевого, два символа с третьего и четыре с шестого.

Но, вообще, команда move это, конечно, больше про перемещение файлов и папок. Конечно же, задавать имена с датой в любом формате можно и при перемещении.

Кстати, в самом первом примере мы находили нужным нам файл с датой в имени, которая была записана в правильной по российским нормам последовательности dd.mm.yyyy, но ведь она может быть записана и другим способом. Что если в имени файла у нас только месяц и последние две цифры года? А мы хотим поставить сначала год, потом месяц, да ещё и разделить их символом _ для лучшей читаемости.

Источник

Cmd date в имени файла

В числе системных переменных есть переменная %date%, которая содержит текущую дату. Если в окне командного процессора ввести команду

то вывод будет примерно таким:
15.10.2014
Для получения отдельных значений номера дня, месяца и года используется операция извлечения подстроки. Так,

— извлечь четыре последних символа из строки.

или это же можно записать так

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

0,2% rem Месяц даты Set MM=%DATE:

3,2% rem Год даты [сокращенный] Set YY=%DATE:

8,2% rem Год даты [полный] Set YYYY=%DATE:

Следует все же отметить, что такой формат вывода даты используется в операционных системах более поздних, чем windows 2000. Для тех счастливых (часов не наблюдающих) и безмятежных людей, которые эксплуатируют эту или более ранние версии, упомяну, что работа с датой и механизм извлечения элементов даты будет несколько отличаться. На всякий случай приведу и его. Скорее для истории.
Не использовать для других операционных систем!

3,2% rem Месяц даты Set MM=%DATE:

6,2% rem Год даты [сокращенный] Set YY=%DATE:

11,2% rem Год даты [полный] Set YYYY=%DATE:

Выше были рассмотрены различные варианты получение элементов даты в bat / cmd файлах. И теперь можно приступать собственно к работе с файлами и папками (каталогами), в именах которых присутствуют элементы даты.

Читайте также:  Самое красивое имя в мире для девочки мусульманское

Копирование файлов, в имени которых присутствует дата.

В bat / cmd файлах там, где необходимо присутствие дня, месяца или года мы будем использовать значения, которые мы рассмотрели в предыдущем параграфе. Перед выполнением команды вместо %date. % или переменной, если вы ее определили, произойдет подстановка соответствующих значений.
Например, необходимо скопировать файл, с именем даты в формате YYYYMMDD и расширением rar в в каталог backup.

Или то же самое, если были определены переменные:

Копирование в файл или каталог (папку), в имени которых присутствует дата.

Довольно часто это так же используется и для создания архивов.

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

0,2% if not exist %PATHARHDAY% ( md %PATHARHDAY% )

Теперь в такой каталог можно копировать/перемещать файлы

(Здесь, как и в других примерах, не проверяется код возврата команды, что не всегда приемлемо при написании «боевых» сценариев).
Если источник и (или) приемник находятся на сетевом диске и адрес его начинается с двух слэшей, то необходимо использовать команду xcopy.

Копирование файлов по дате создания

В некоторых случаях удобно копировать файлы, созданные (модифицированные) сегодня. Для этого даже нет необходимости знать их имена.
Конечно, можно написать собственный bat / cmd сценарий, который будет перебирать файлы требуемого каталога, извлекать дату создания файла, сравнивать с текущей и, при необходимости, копировать в каталог назначения. Но в операционной системе уже есть достаточно мощные средства, позволяющие выполнять такие действия. Их сейчас мы и рассмотрим.

Все файлы созданные (модифицированные) сегодня будут скопированы из каталога d:\input в d:\output

Такая команда скопирует все файлы сегодня созданные из папки N:\arhive в папку M:\SUPERARHIVE.
Если в предыдущем примере вместо copy использовать команду move, то такие файлы будут не скопированы, а перемещены.

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).

Новый раздел о средствах командной строки в рамках этого же проекта расположен здесь

Источник

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

что такое оператор(ы) командной строки Windows, который я могу использовать для получения текущего datetime в формате, который я могу поместить в имя файла?

Я действительно не возражаю против формата даты, в идеале это было бы yyyy-mm-dd, но все просто.

пока у меня есть это, которое на моей машине дает мне Tue_10_14_2008_230050_91 :

Я могу жить с этим, но это кажется немного неуклюжим. В идеале это было бы короче и иметь формат, упомянутый ранее.

Я использую Windows Server 2003 и Windows XP Professional. Я не хочу устанавливать дополнительные утилиты для достижения этого (хотя я понимаю, что есть некоторые, которые будут делать хорошее форматирование даты).

Читайте также:  Зарегистрировать команду на турнир имени нордена

26 ответов

Если вы предпочитаете время в 24-часовом / военном формате, вы можете заменить второй для строки следующим:

Если вы хотите дату независимо от заказа дня/месяца региона, вы можете использовать «WMIC os GET LocalDateTime» в качестве источника, так как он находится в ISO порядок:

региональный независимый анализ времени даты

примеры: (в cmd-скрипте используйте %% вместо %)

date.exe +»%Y%m%d %H%M%S: Any text»
20091222 185503: любой текст

date.exe +»Text: %y/%m/%d-any text-%H.%M»
Текст: 09/12/22-любой текст-18.55

Command: date.exe +»%m-%d «»»%H %M %S «»»»
07-22 «18:55:03″`

используя его в сценарии CMD, чтобы получить информацию о году, месяце, дне, времени:

использовать его в сценарии CMD для получения метки времени в любом требуемом формате:

извлечение информации о дате / времени из любого справочного файла.

добавление в файл информации о дате / времени:

дата.ехе часть свободных инструментов GNU которые не нуждаются в установке.

копирование date.exe в любой каталог, который находится в пути поиска может привести к сбою других сценариев, которые используют встроенный Windows date команда.

еще два способа, которые не зависят от настроек времени (взято из : как получить данные/время независимо от локализации:). И как же сделать день недели, и ни один из них не требует разрешения администратора!:

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

VSCRIPT / BATCH гибридный (можно ли встроить и выполнить VBScript в пакетный файл без использования временный файл?) тот же случай, что и JScript, но гибридизация не так совершенна:

использовать его из партии файл:

еще один способ с WMIC что также дает неделю года и день недели, но не миллисекунды (для миллисекунд проверьте ответ foxidrive):

используя TYPEPERF С некоторыми усилиями, чтобы быть быстрым и совместимым с различными языковыми настройками и так же быстро, как возможно:

MSHTA позволяет вызывать методы JavaScript, аналогичные методу JScript, показанному в #3 выше. Имейте в виду, что свойства объекта даты JavaScript, включающие значения месяца, нумеруются от 0 до 11, а не от 1 до 12. Поэтому значение означает 9 октября.

вот вариант из alt.msdos.партия.nt, который работает локально-независимо.

поместите это в текстовый файл, например getDate.cmd

чтобы заставить код работать без ошибок msg в stderr, мне пришлось добавить одинарные кавычки вокруг назначений переменных для %%a, %%b и %%c. Моя локаль (PT) вызывала ошибки на одном этапе цикла/анализа, где выполнялись такие вещи, как «set =20». Котировки дают токен (хотя и пустой) для левой стороны оператор присваивания.

недостатком являются беспорядочные имена переменных локали: «yy», » mm » и «dd». Но какая разница!

Источник

Оцените статью
Имя, Названия, Аббревиатуры, Сокращения
Добавить комментарий

Adblock
detector