Язык страницы:

Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows

Введение

Однажды мы задались вопросом: Как, используя встроенные средства командного интерпретатора Windows, вставить в имя файла текущую дату или время? Вопрос этот актуален - периодически возникает необходимость в выпуске новых патчей, которые удобно именовать по дате/времени сборки.

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

Пользователи unix-подобных систем находятся в более привилегированном положении - вставка в имя файла время текущего релиза выполняется стандартно, в одну строку, например:

jar -cf patch_`date +%Y%m%d_%H%M%S`.jar

Однако не всегда есть под рукой unix-машина, или работа выполнена на windows-машине. В результате изучения help-страниц команд было найдено простое, хотя несколько запутанное решение.

Последние версии Windows поддерживают динамические переменные окружения %DATE% и %TIME%, которые представляют информацию о текущих дате и времени в формате команд DATE и TIME, соответственно. Но задача была осложнена тем, что имя файла должно было содержать дату/время в формате ГГГГММДД_ччммсс.

В данном решении используются возможности встроенной команды set командного интерпретатора Windows. Подробности ее использования всегда доступны на страницах помощи путем выполнения команды set/?.
Формат вывода зависит от текущей локализации на вашем компьютере.
Исследования проводились только на системах с операционными системами Windows XP и Windows 2003. Вероятно, что все используемые возможности данных ОС будут поддерживаться во всех последующих версиях системы.

Пошаговое решение

Следующие команды выводят дату и время, соответственно.

echo %DATE%
echo %TIME%

После выполнения этих команд я получил следующие результаты (на момент написания).

12.01.2008
12:29:23,54

Как видим, дата выводится в формате ДД.ММ.ГГГГ, а время - чч:мм:сс,дс (дс - сотые доли секунды). Полагаю, что такое представление не самое лучшее при именовании файлов. Можно смело утверждать что формат вида ГГГММДД_ччммсс (или подобный) гораздо лучше и используется практически всегда.

Следующие действия приведут дату и время к требуемому формату.

Удаление сотых

Рассмотрим как можно удалить сотые доли секунды.

Запись %PATH:~n,m% выполняет выборку из переменной %PATH% m символов, начитая с символа n. Если длина не указана, то полагается что будет использован остаток строки с n-го символа. Если одно из чисел отрицательно, то они рассматриваются как смещение с левого или правого края. Все символы в строке нумеруются с нуля.

set now=%TIME:~0,-3%

Таким образом, данная команда выбирает только часть строки переменной %TIME%, за исключением последних трех символов.

В результате получится 12:29:23.

Удаление нецифровой информации

Необходимо избавиться от символов двоеточия (:).

Запись вида %PATH:str1=str2% производит замену всех подстрок str1 на str2 в значении переменной %PATH%. Пустое значение подстроки str2 приводит к удалению всех подстрок str1.

set now=%now::=%

В данном случае берется значение переменной %now% из предыдущего примера. В нашем случае str1 равно второму двоеточию, а str2 - пустая строка. То есть, каждое двоеточие заменяется на пустую строку.

В результате получается 122923.

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

set now=%now: =0%

Изменение формата вывода даты

Для выполнения этой операции необходимо взять три части, соответствующие году, месяцу и дню. Эта операция уже была рассмотрена ранее.

  • Получить год %DATE:~-4% (четыре символа с правого края. Результат - 2008)
  • Получить месяц %DATE:~3,2% (два символа из середины, с учетом того, что нумерация начинается с нуля. Результат - 01)
  • Получить день %DATE:~0,2% (два символа с левого края - то есть нулевой и первый. Результат - 12)

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

Заключение

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

Полное решение

Если объединить все эти шаги воедино, получим рабочую строку %DATE:~-4DATE:~3,2DATE:~0,2%. Теперь можно показать весь пример полностью.

set now=%TIME:~0,-3%
set now=%now::=%
set now=%now: =0%
set now=%DATE:~-4%%DATE:~3,2%%DATE:~0,2%_%now%

Первоначальные данные (ниже) были преобразованы и сохранены в переменной %now%, которую можно использовать в командных сценариях.

12.01.2008
12:29:23,54

Теперь переменная %now% хранит конечное значение 20080112_122923.

Пример использования


На момент написания статьи вызов сценария сгенерирует файл path_20080112_122923.jar (12 января 2008 года 12:29:23).


  • Закладки и социальные сети
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на del.icio.us
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Digg
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Furl
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Reddit
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Ask
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на BlinkList
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на blogmarks
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Google
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Ma.gnolia
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Netscape
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на ppnow
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Rojo
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Shadows
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Simpy
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Socializer
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Spurl
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на StumbleUpon
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Tailrank
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Technorati
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Live Bookmarks
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Wists
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Yahoo! Myweb
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на BobrDobr
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Memori
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Faves
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Favorites
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Facebook
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Newsvine
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Yahoo! Bookmarks
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Twitter
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на myAOL
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Slashdot
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Fark
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на RawSugar
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на LinkaGoGo
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Mister Wong
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Wink
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на BackFlip
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Diigo
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Segnalo
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Netvouz
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на DropJack
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на Feed Me Links
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на funP
  • Сохранить "Подстановка текущих даты/времени в имя файла стандартными средствами командной строки Windows" на HEMiDEMi
articles/windatetime.txt · Последние изменения: 2008/04/11 08:41 От Ildar Shaimordanov
GNU Free Documentation License 1.2 www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0