2012-07-08 3 views
11

아시다시피, Batch에는 UNIX 시간을 제공하는 명령이 없습니다. 내가 찾을 수있는 가장 가까운 것은 %time%이며 타임 스탬프 만 표시됩니다.배치 : UNIX 타임에 대한 타임 스탬프

UNIX 시간을 얻을 수있는 일괄 처리 명령이 있습니까?

+0

가능한 중복처럼 전화"http://stackoverflow.com/questions/11124572/ Windows에서 사용하는 명령과 동일 함) – dbenham

+0

@dbenham 실제로 복제본을 사용하여 해결책을 간과했습니다. –

+0

GNU date.exe (GnuWin32, MinGW, Cygwin에서) 파일을 다운로드하면 도움이 될 것입니다. –

답변

18

Richie Lawrence's batch library에는 멋진 스크립트가 모두 있습니다. 필요한 것은 DateToSec (GetDateGetTime을 사용)입니다. 그 결과 GetUnixTime에 전달 된 제 파라미터로 복귀한다

@echo off 
setlocal 
call :GetUnixTime UNIX_TIME 
echo %UNIX_TIME% seconds have elapsed since 1970-01-01 00:00:00 
goto :EOF 

:GetUnixTime 
setlocal enableextensions 
for /f %%x in ('wmic path win32_utctime get /format:list ^| findstr "="') do (
    set %%x) 
set /a z=(14-100%Month%%%100)/12, y=10000%Year%%%10000-z 
set /a ut=y*365+y/4-y/100+y/400+(153*(100%Month%%%100+12*z-3)+2)/5+Day-719469 
set /a ut=ut*86400+100%Hour%%%100*3600+100%Minute%%%100*60+100%Second%%%100 
endlocal & set "%1=%ut%" & goto :EOF 

, 즉 %UNIX_TIME% :

여기 작은 WMI를 이용하는 간단한 스크립트이다. 예를 들어
:

1341791426 seconds have elapsed since 1970-01-01 00:00:00 

는 희망이 도움이!

+3

이것은 좋은 대답이지만 코드에서 버그를 발견 한 것 같습니다 . 1 년의 첫 2 개월 동안 결과는 2 년 후입니다. '4800 + z '를 가지고 있다면 4800-z가 필요하다고 생각합니다. Richie Lawrence의 원래 DateToSecs 코드를 참조하십시오. 시간이 있으면 수정 사항을 확인하고 게시물을 수정하십시오. – jimhark

+0

@jimhark 네 말이 맞아. 수정 주셔서 감사! –

+3

좋습니다. 감사. 내 사본에 또 다른 변경 사항을 만들었습니다. 그것은 정말로 버그는 아니지만 나는 당신과 그것을 나눌 것이라고 생각했습니다. 이 코드를 완전히 이해하려고 시도했습니다. '-2472633'을'-719469'로 바꾸면 4800을 더할 필요가 없다는 것을 알았습니다. 여기서는 필요없는 조정 만 취소합니다. 그래서'10000 % Year %%% 10000-z'와'Day-719469'로 끝나는 두 라인을 사용합니다. 큰 차이는 아니지만 지금은 719469가 무엇인지 설명하는 것이 더 쉽습니다. 1970 년 동안의 일 (days of days)은 신기원에 적응하는 데 사용되었습니다. – jimhark

0

UNIX 시간을 반환하기위한 배치 명령이 없습니다. 유일한 옵션은 UNIX 시간을 반환하는 배치 파일에서 실행할 수있는 프로그램을 작성하거나 Windows PowerShell을 사용할 수있는 것입니다.

+0

놀랍게도, 일괄 처리 방식이 있습니다 ... 내 대답을 참조하십시오. –

+0

사과드립니다. < – ctor

+1

powershell equivalent 명령 'get-date -uformat % s' (또는'powershell -command get-date -uformat % s'는 cmd/batch에서 호출합니다. – wmz

0

가장 좋은 해결책은 freeestanding date.exe unix-port를 다운로드하는 것입니다.

MS Date 명령과 충돌하지 않도록 unixdate.exe로 이름을 바꾸는 것이 좋습니다.

here

  1. 다운로드 & 압축 해제에서를 가져옵니다. 내가 아는 한, 모든 유틸리티는 '휴대용'입니다. 즉, 설치 프로그램이 필요하지 않습니다. 나는 몇 가지 (rm.exe & date.exe)만을 사용했습니다. 또한, 당신은 이미
  2. 도와 정보는 다음 명령을 입력 얻을 수있는 하위 폴더의 실제 실행 포트 (USR \ 로컬 \의 wbin)를 찾기가 그들이 당신의 Utils 다른 시스템과 일치 할 수 있습니다 경우에 exe 인의 이름을 바꿀 수 있습니다 --help와

예 (소문자에 도움을 주문해야한다) :

((PROMPT)):unixdate +%Y%M%d 
20141704 

((PROMPT)):unixdate +%Y%b%d 
2014Sep04 
+0

'20141704'? '17' ?? 10 월 ??? – Stephan

2

무엇 UNIX 타임 스탬프를 반환하는 간단한 한 줄 긴 C 프로그램에 대한? 배치 스크립트에서 % 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 
5

는 "getUtime라는 .bat 파일을 만듭니다.박쥐 ("[날짜 + % s '에

@echo off 
echo WScript.Echo(new Date().getTime()); > %temp%\time.js 
cscript //nologo %temp%\time.js 
del %temp%\time.js 

하고 명령의 창에 해당 무엇]이

"C:\>getUTime" 
1430894237616 
관련 문제