Командная строка windows вывести время

CMD/BAT: работа с датой и временем в командной строке

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 1

1 Тема от Rumata 2010-01-21 22:48:50 (изменено: Rumata, 2010-01-22 19:42:40)

  • Rumata
  • Разработчик
  • Неактивен
  • Рейтинг : [ 31 | 0 ]

    Тема: CMD/BAT: работа с датой и временем в командной строке

    Эта тема родилась почти два года назад. Нам потребовалось самыми простыми средствами ТОЛЬКО командной строки получит временной слепок в формате ГГГГММДД_ччммсс (Год, Месяц, День, часы, минуты, секунды). В дальнейшем этот слепок предполагалось использовать в именах файлов для предотвращения путаницы в создаваемых однотипных файлах. Решение было найдено и использовалось некоторое время (решение опубликовано в виде статьи Подстановка текущих даты/времени в имя файла стандартными средствами командной строки 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.

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

    Рассмотрим, как же эта конструкция поможет нам. 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.

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

    Aнализ текущего времени
    На форуме был задан вопрос как проанализировать текущее время:

    . нужно в процессе выполнения скрипта проанализировать текущее время, если текущее время меньше 15:00 , то пропускаем (по goto) определённую строку (блок).

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

    time time

    Отображает или задает системное время. Displays or sets the system time. Если используется без параметров, то время отображает текущее системное время и предлагает ввести новое время. If used without parameters, time displays the current system time and prompts you to enter a new time.

    Чтобы изменить текущее время, необходимо быть администратором. You must be an administrator to change the current time.

    Синтаксис Syntax

    Параметры Parameters

    Параметр Parameter Описание Description
    [: [: [. ]]] [am | pm] Устанавливает системное время на новое указанное время, где чч — в часах (обязательно), mm — в минутах, а SS — в секундах. Sets the system time to the new time specified, where HH is in hours (required), MM is in minutes, and SS is in seconds. Nn может использоваться для указания сотых долей секунды. NN can be used to specify hundredths of a second. Необходимо разделять значения чч, mm и SS с помощью двоеточий (:). You must separate values for HH, MM, and SS with colons (:). SS и nn должны быть разделены точкой (.). SS and NN must be separated with a period (.).

    Если параметр AM или PM не указан, по умолчанию используется 24 -часовой формат . If am or pm isn’t specified, time uses the 24-hour format by default. /t /t Отображает текущее время без запроса на новое время. Displays the current time without prompting you for a new time. /? /? Отображение справки в командной строке. Displays help at the command prompt.

    Комментарии Remarks

    Допустимые значения чч : от 0 до 24. Valid HH values are 0 through 24.

    Допустимые значения mm и SS : от 0 до 59. Valid MM and SS values are 0 through 59.

    Примеры Examples

    Если расширения команд включены, для вывода текущего системного времени введите: If command extensions are enabled, to display the current system time, type:

    Чтобы изменить текущее системное время на 5:30 PM, введите один из следующих элементов: To change the current system time to 5:30 PM, type either of the following:

    Чтобы отобразить текущее системное время, а затем ввести новое время, введите следующую команду: To display the current system time, followed by a prompt to enter a new time, type:

    Для сохранения текущего времени и возврата в командную строку нажмите клавишу ВВОД. To keep the current time and return to the command prompt, press ENTER. Чтобы изменить текущее время, введите новое время и нажмите клавишу ВВОД. To change the current time, type the new time and then press ENTER.

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

    Обновление: теперь, когда в 2016 году я буду использовать PowerShell для этого, если у него нет убедительной обратной совместимости, особенно из-за проблем с региональными настройками с использованием date . См. @npocmaka qaru.site/questions/16145/.

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

    Я хочу иметь файл .bat, который застегивает каталог в архив с текущей датой и временем как часть имени, например Code_2008-10-14_2257.zip . Есть ли какой-либо простой способ сделать это, независимо от региональных настроек машины?

    На самом деле я не возражаю против формата даты, в идеале это будет yyyy-mm-dd, но все простое в порядке.

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

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

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

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

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

    C: > test.cmd
    Местная дата [2012-06-19 10: 23: 47.048]

    Сеанс по времени, зависящий от региона,

    Выходной формат %DATE% и команды dir зависит от региона и, следовательно, не является ни надежным, ни умным. date.exe (часть UnxUtils) предоставляет любые дату и время в любом воображаемом формате. Вы также можете извлечь информацию о дате/времени из любого файла с помощью date.exe .

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

    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 «»»»

    Информация о дате/времени из справочного файла:
    date.exe -r c:\file.txt +»The timestamp of file.txt is: %Y-%m-%d %H:%M:%S»

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

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

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

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

    date.exe часть бесплатных инструментов GNU, которые не требуют установки.

    ПРИМЕЧАНИЕ. Копирование date.exe в любой каталог, находящийся в пути поиска, может привести к сбою других сценариев, которые используют встроенную команду date для Windows.

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

    MAKECAB — будет работать на КАЖДОЙ системе Windows (быстро, но создает небольшой временный файл) (foxidrive script):

    ROBOCOPY — это не встроенная команда для Windows и XP и Windows Server 2003, но это может быть скачано с microsoft сайт. Но он встроен во все: от Windows Vista и выше:

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

    JScript/пакетный гибрид (необходимо сохранить как .bat ). JScript доступен на каждой системной форме NT и выше, в составе Windows script Host (хотя может быть отключен через реестр, это редкий случай):

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

    PowerShell — может быть установлен на всех компьютерах с .NET-загрузкой из Microsoft (v1, v2, v3 (только для Windows 7 и выше )). Он по умолчанию установлен на все: от Windows 7/Windows Server 2008 и выше:

    Чтобы использовать его из пакетного файла:

    Скомпилированный jscript.net/batch (никогда не видел Windows-компьютер без .NET, поэтому я думаю, что это довольно портативный):

    Logman Это не может получить год и день недели. Он сравнительно медленный, а также создает временный файл и основан на отметках времени, которые logman ставит на свои файлы журналов. Он будет работать на всех, начиная от Windows XP и выше. Вероятно, он никогда не будет использоваться кем-либо — включая меня — но это еще один способ.

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

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

    MSHTA позволяет вызывать методы JavaScript, похожие на метод JScript, продемонстрированный в № 3 выше. Имейте в виду, что свойства объекта JavaScript Date с месячными значениями нумеруются от 0 до 11, а не от 1 до 12. Таким образом, значение 9 означает октябрь.

  • Читайте также:  Пакетные менеджеры arch linux
Оцените статью