2010-08-10 3 views
7

Есть ли способ получить эпоху с помощью команды Windows? Если нет, могут ли быть изменены выходные команды date и time?Есть ли способ получить эпоху с помощью команды Windows?

Например date в Windows, дает дату с/и т.д. Я хотел бы получить выход, который не имеет специальных символов, таких как /:

+1

С * epoch time * - Вы имеете в виду текущее количество секунд с 1 января 1970 года? –

+0

... или с 1904-01-01 или 100 нс интервалов с 1601-01-01 или в разные другие эпохи ;-) Эпоха UNIX на сегодняшний день является самым странным, imho ;-) – Joey

+0

@moorecats: если мой ответ работал отлично вам, вы можете его перенести, а затем выбрать в качестве ответа на свой вопрос. Так работает StackOverflow. См. FAQ - http://stackoverflow.com/faq. Вы можете, конечно, выбрать другой ответ, если считаете, что он лучше подходит для вашего вопроса. –

ответ

0

Чтобы получить время в формате «ГГГГММДД», попробуйте следующее:

for /F "tokens=2-4 delims=/ " %i in ('date /t') do echo %k%i%j 

Больше на:

+0

Это работало отлично. Статья была большой, спасибо за указание на это. – moorecats

2

из командной строки попробовать этот

for /f "tokens=2,3,4 delims=/ " %f in ('date /t') do @echo %h%g%f 

запомнить удвоиться в% символов, если в пакетном файле

@echo off 
setlocal 
for /f "tokens=2,3,4 delims=/ " %%f in ('date /t') do set d=%%h%%g%%f 
for /f "tokens=1,2 delims=: " %%f in ('time /t') do set t=%%f%%g 
echo datetime is : %d%%t% 
endlocal 

Я получил этот результат:

c:\development>xx.bat 
datetime is : 201008111108 
+0

И я получаю 'datetime is: 2331' ;-) – Joey

+0

@Preet Sangha: ваш' t' может содержать ведущие пробелы, если час до 10:00. Вы можете исправить это с помощью 'set t =% t: = 0' (который заменяет все пробелы с' 0') ... –

+0

@pip - sweet! Спасибо. Не стесняйтесь просто отредактировать ответ. –

1

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

Из VBScript вы можете получить доступ к текущей дате и времени с помощью функций Date и Time. FormatDateTime предоставит вам формат даты и времени, нейтральный для культуры, который вы сможете разобрать.

Вы можете получить результат frmo в VBScript, используя WScript.Echo из сценария и назвав его как и из партии:

for /f "delims=" %%x in ('cscript /nologo foo.vbs') do set result=%%x 

Тогда переменная %result% содержит независимо от VBScript был как вывод на своей первой линии ,

+0

Rössel: Почему вы говорите, что * 'нет надежного способа получить дату в пакетных файлах * *? В каком смысле слова 'date/t' и' time/t' или 'echo.% Date%' и 'echo.% Time%' ненадежны? - (Возможно, их нелегко обрабатывать в пакетных файлах, но как они «ненадежны»?) –

+1

Rössel: Вы имели в виду сказать: * Нет надежного способа получить дату в пакетных файлах * **, чтобы они работают надежно в разных местах и ​​часовых поясах **? –

+0

@pipitas: Воистину, это то, что я говорю. Или, другими словами: вы можете получить дату/время просто отлично, чтобы дать человеку возможность читать, но вы не можете надежно получить дату или время в структурированном формате, чтобы обработать его дальше с помощью командного файла. Существуют некоторые решения, которые работают для большего разнообразия локалей, но в некоторых из них все еще не работают. Таким образом, я называю это ненадежным. Если я хочу получить программу и распространять ее другим, я, конечно, не хочу, чтобы локаль влияла на ее функцию. – Joey

2

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

В toEpoch.vbs:

WScript.Echo DateDiff("s", "01/01/1970 00:00:00", Now()) 

Затем вызывается из моего пакетного сценария, как так:

for /f "delims=" %%x in ('cscript /nologo toEpoch.vbs') do set epoch=%%x 

Это задало% epoch% с текущей временной отметкой unix, и я смог использовать ее так, как мне было нужно.

Надеюсь, это поможет.

1

Проект CoreUtils для Windows, http://gnuwin32.sourceforge.net/packages/coreutils.htm содержит команду date, которая предоставляет вам те же возможности, что и в Linux.

Загрузите программное обеспечение и переименуйте date.exe в gnudate.exe, чтобы избежать конфликта с командой Dos date. Для запуска команды нужны файлы libintl-2.dll и libiconv-2.dll.

Для всех доступных вариантов типа:

gnudate --help 

Например gnudate "+%a %e %b %Y %H:%M:%S" даст:

Sun 10 apr 2016 21:52:35 

Команда gnudate +%s даст секунд с начала эпохи:

1460325461 

Следующая Dos командный файл показывает использование gnudate. Вам нужно будет удвоить значение % в параметре gnudate +%s.

rem set the variable s to the epoch seconds. 
for /f "tokens=1 delims=" %%A in ('gnudate +%%s') do set s=%%A 
rem use `%s%` for the time offset parameter of the ffmpeg drawtext filter. 
ffmpeg -y -f lavfi -i testsrc=duration=15.3:size=cif:r=10 -vf "drawtext=fontfile=arial.ttf:text=%%{pts\\\:localtime\\\:%s%\\\:%%a %%d %%b %%Y %%H\\\\\\:%%M\\\\\\:%%S}:fontsize=10:x=w-text_w:y=h-lh:box=1" a.mp4 

ffplay a.mp4 

Этот пакетный файл был протестирован в Windows 8 на виртуальной машине под Linux.

Чтобы запустить его, вам необходимо установить ffmpeg.
Вы можете скачать Static build от https://ffmpeg.zeranoe.com/builds/.

Смежные вопросы