2012-08-17 57 views
1

中獲取小時和分鐘我需要修改已經退出的開發人員編寫的Windows批處理文件。以下是對已經存在的部分:修改批處理腳本,以便從%currentdate%

set date/t=%currentdate% 
for /f "tokens=2-4 delims=/ " %%a in ('date/t') do (
set fmonth=%%a) & (set fdate=%%b) & (set fyear=%%c) 

我有點勉強理解如何/爲什麼這樣工作的,它的工作是設計的。如果今天運行,fmonth是08,fdate是17,2012年是fyear。但是我還需要的是幾秒鐘和幾秒鐘。我一直在猜測和搜索,時間太長了,我需要專業幫助。

任何指針?

謝謝!基於%的時間%

回答

0

分裂

set time=%time%: 
for /f "tokens=1-3,* delims=:" %%k in ("%time%") do (set fhour=%%k) & (set fminute=%%l) & (set fsecfrac=%%m) 
for /f "tokens=1-3,* delims=," %%k in ("%fsecfrac%") do (set fsecond=%%k) & (set fmsec=%%l) 
2

的劉若英答案不會在所有的語言環境中工作。有些使用逗號,有些使用句點作爲小數點。此外,解決方案可以壓縮爲單個FOR語句。以下應該適用於所有地區。小數秒實際上是釐秒(1/100),而不是毫秒(1/1000)。

for /f "tokens=1-4 delims=:.," %%A in ("%time%") do (
    set fhour=%%A 
    set fmin=%%B 
    set fsec=%%C 
    set fcsec=%%D 
) 

如果你想用這些值進行數學計算,那麼你有額外的工作要做。小於10的值將以零爲前綴,這可能不是問題。但SET將任何以零爲前綴的數字視爲八進制符號,而08和09不是有效的八進制數字。

有幾種方法可以去掉前導零,但最方便的是使用一些數學運算。只需將值前綴爲100,然後取模100(除以100後的餘數)。所有的分配都可以用一個SET/A語句完成。

for /f "tokens=1-4 delims=:.," %%A in ("%time%") do set /a "fhour=100%%A%%100, fmin=100%%B%%100, fsec=100%%C%%100, fcsec=100%%D%%100" 
+0

前綴可能只是'1',除非我失去了一些東西。除此之外,完全同意。 – 2012-08-18 21:38:54

+0

@AndriyM - 我想到了這一點,我相信這是分鐘和秒鐘。但我不確定小時是否始終爲0前綴。它可以前綴10而不是100。我相信這個100來自一個通用的解決方案,我看過哪裏可能有0,1或2位數字,可能是0前綴,可能不是。 – dbenham 2012-08-18 22:53:31

+0

我現在看到了,謝謝你的解釋,這很有道理。 – 2012-08-18 22:55:44