Как получить метку времени UNIVERSAL Windows для пакетного файла - PullRequest
8 голосов
/ 17 ноября 2009

У меня возникают проблемы при создании метки времени в командном файле Windows, потому что я получаю разные форматы даты в разных версиях Windows.

Моя машина:

>echo %date%
>Tue 11/17/2009

Друзья машины:

>echo %date%
>11/17/2009

Я думаю, должен быть какой-то способ получения даты (17.11.2009) из обеих строк с использованием for / f. Я пытался и гуглил и не могу найти ответ.

Есть ли другой способ получить метку времени без использования% date%?

Ответы [ 5 ]

4 голосов
/ 20 мая 2011

Оформить doff.exe . Я часто использую это для получения меток времени для именования файлов журналов. С его веб-сайта:

DOFF печатает отформатированную дату и время с необязательным смещением даты (например, -1 печатает вчерашнюю дату, +1 печатает завтрашнюю дату). Чтобы просмотреть все доступные опции, выполните «doff -h». Обычно я использую эту утилиту для переименования файлов журнала, чтобы они включали метку времени (см. Третий пример ниже). Этот код должен компилироваться под Unix / Linux, а также под DOS.

Примеры команд:

C:\>doff
19991108131135

Без параметров выводится текущая дата / время в следующем формате: ггггммддччмис

C:\>doff mm/dd/yyyy
11/08/1999

В приведенном выше примере указана спецификация формата даты.

@echo off
for /f "tokens=1-3 delims=/ " %%a in ('doff mm/dd/yyyy -1') do (
set mm=%%a
set dd=%%b
set yyyy=%%c)
rename httpd-access.log httpd-access-%yyyy%%mm%%dd%.log

В приведенном выше примере командного файла показан удобный способ переименования файла журнала на основе вчерашней даты. Команда «for» выполняет doff для печати вчерашней даты (параметр «-1» указывает вчера), затем извлекает каждый компонент даты в переменные пакетного файла DOS. Команда «переименовать» переименовывает «httpd-access.log» в «httpd-access- [вчерашняя дата] .log»


Также ознакомьтесь с файлом Microsoft now.exe, доступным в Windows Server 2003 Resource Kit Tools . Одна плохая вещь, которую я обнаружил (трудный путь), заключается в том, что она устанавливает в ОШИБКЕ количество напечатанных символов.

выглядит так:

c:\>now

Thu May 19 14:26:45 2011

Справка:

NOW   :  Display Message with Current Date and Time

Usage : NOW [message to be printed with time-stamp]

    NOW displays the current time, followed by its command-line arguments.
    NOW is similar to the standard ECHO command, but with a time-stamp.
2 голосов
/ 17 ноября 2009

Используйте VBScript , если вы хотите получить независимые настройки даты и времени:

thedate = Now
yr = Year(thedate)
mth = Month(thedate)
dy = Day(thedate)
hr = Hour(thedate)
min = Minute(thedate)
sec = Second(thedate)
WScript.Echo yr&mth&dy&hr&min&sec
1 голос
/ 17 ноября 2009

К сожалению, это нельзя сделать напрямую, поэтому вам нужно прибегнуть к таким хакам, как GetDate.cmd .

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

Лично я бы попытался обойти его, используя PowerShell, который полностью обходит проблему.

0 голосов
/ 26 декабря 2014

Как я уже писал здесь: Пакет: метка времени в UNIX Time

А как насчет простой однострочной C-программы, возвращающей метку времени UNIX? Вы можете получить значение из% errorlevel% в пакетном скрипте.

#include <stdio.h>
#include <time.h>

int main(void)
{
    return (int) time(NULL);
}

В моем тесте в командной строке это сработало:

C:\Users\dabaran\Desktop\cs50\src\C>.\time || echo %errorlevel% && set mytstamp=%errorlevel%
1419609373

C:\Users\dabaran\Desktop\cs50\src\C>echo %mytstamp%
1419609373
0 голосов
/ 28 июля 2010

Вам не нужен VBScript. Вы можете сделать это примерно так:

echo %date:~-10,2%/%date:~-7,2%/%date:~-4,4%

Источник

...