2012-07-08 15 views
11

मुझे पता है कि बैच में कोई आदेश नहीं है जो यूनिक्स समय देता है। सबसे नज़दीकी मुझे मिल सकता है %time%, जो केवल टाइमस्टैम्प प्रदर्शित करता है।बैच: यूनिक्स समय के लिए टाइमस्टैम्प

क्या बैच में कमांड या कमांड का सेट है जिसके साथ आप यूनिक्स समय प्राप्त कर सकते हैं?

+0

किस आदेश की खिड़कियों बराबर है] संभव डुप्लिकेट की तरह कहते हैं "(http://stackoverflow.com/questions/11124572/ विंडोज़-समकक्ष-ऑफ-द-कमांड-तिथियां) – dbenham

+0

@ डेबेनहम वास्तव में एक डुप्लिकेट, मैंने आपके समाधान को अनदेखा किया। –

+0

एक जीएनयू date.exe डाउनलोड करें (GnuWin32, MinGW, Cygwin से) फ़ाइल सहायक होगी। –

उत्तर

18

Richie Lawrence's batch library है जिसमें उन सभी निफ्टी आसान स्क्रिप्ट हैं। आपको जिसकी आवश्यकता है वह DateToSec है (जो GetDate और GetTime का उपयोग करता है)।

@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 

परिणाम पहले पैरामीटर GetUnixTime के लिए पारित में लौटा दी जाएगी, अर्थात %UNIX_TIME%:

यहाँ एक सरल स्क्रिप्ट, कि एक छोटे से WMI कार्यरत है।
उदाहरण के लिए:

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

आशा है कि यह मदद करता है!

+3

से कॉल करने के लिए 'get-date -uformat% s' (या' powerhell -command get-date -uformat% s' होगा यह एक अच्छा जवाब है, लेकिन मुझे कोड में एक बग मिला है । वर्ष के पहले दो महीनों के लिए, परिणाम भविष्य में दो साल हैं। जहां आपके पास '4800 + z' है, मुझे लगता है कि आपको' 4800-z' की आवश्यकता है। रिची लॉरेंस के मूल डेटोसेक्स कोड का संदर्भ लें। यदि आपके पास समय है, तो कृपया मेरा फ़िक्स सत्यापित करें (और अपनी पोस्ट संपादित करें)। – jimhark

+0

@jimhark आप सही हैं। सुधारों के लिए धन्यवाद! –

+3

अच्छा। धन्यवाद। मैंने अपनी प्रतिलिपि में एक और बदलाव किया है। यह वास्तव में एक बग नहीं है, लेकिन मैंने सोचा कि मैं इसे आपके साथ साझा करूंगा। मैंने इसे पूरी तरह समझने की कोशिश करने के लिए इस कोड को अलग किया। मैंने सोचा कि अगर आप '-2472633' को' -719469' में बदलते हैं तो आपको 4800 जोड़ने की आवश्यकता नहीं है। यह सिर्फ एक समायोजन का समर्थन करता है जिसकी आवश्यकता नहीं है। तो आप '10000% वर्ष %%% 10000-z' और 'डे -719469'' के साथ समाप्त होने वाली दो पंक्तियों के साथ हवाएं बनाते हैं। कोई बड़ा अंतर नहीं है, लेकिन अब यह समझाना आसान है कि 719469 क्या है, यह 1 9 70 वर्षों में दिनों की संख्या है, जो युग में समायोजित करने के लिए उपयोग किया जाता है। – jimhark

0

यूनिक्स समय लौटने के लिए कोई बैच कमांड नहीं है। आपके एकमात्र विकल्प एक प्रोग्राम लिखना होगा जो बैच फ़ाइल से चलाया जा सकता है जो यूनिक्स समय लौटाएगा, या आप Windows PowerShell का उपयोग कर सकते हैं।

+0

आश्चर्यजनक रूप से पर्याप्त, वहाँ _is_ एक बैच तरीका है ... मेरा उत्तर देखें। –

+0

मैं क्षमा चाहता हूं>< – ctor

+1

शक्तियों के बराबर कमांड के लिए सीएमडी/बैच – wmz

0

अब तक का सबसे अच्छा समाधान एक फ्रीस्टैंडिंग date.exe यूनिक्स-पोर्ट डाउनलोड करना है।

एमएस डेट कमांड के साथ संघर्ष से बचने के लिए, आप इसे unixdate.exe पर पुनर्नामित करने की अनुशंसा करते हैं।

से here

  1. डाउनलोड & unzip यह प्राप्त करें। जहां तक ​​मुझे पता है, सभी उपयोगिताओं 'पोर्टेबल' हैं, यानी, उन्हें उनके लिए काम करने के लिए किसी भी स्थापना कार्यक्रम की आवश्यकता नहीं है। मैंने केवल कुछ ही उपयोग किए हैं (rm.exe & date.exe)। इसके अलावा, आप exe के मामले में वे आप utils अन्य प्रणाली से मेल करने वाले का नाम बदल सकते पहले से ही है
  2. सबफ़ोल्डर में वास्तविक निष्पादन बंदरगाहों (usr \ स्थानीय \ wbin)
  3. मदद की जानकारी आदेश का पालन किया टाइप प्राप्त करने के लिए खोजें --help साथ (छोटे अक्षरों में मदद वर्तनी चाहिए)

उदाहरण:

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

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

'20141704'? '17' ?? Octember ??? – Stephan

2

क्या सरल 1-लाइन लंबे सी यूनिक्स टाइमस्टैम्प लौटने कार्यक्रम के बारे में? आप बैच स्क्रिप्ट में% 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

एक .bat "getUtime बुलाया फ़ाइल बनाएँ।बल्ला "[तिथि +% s"

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

और इस

"C:\>getUTime" 
1430894237616 
संबंधित मुद्दे