如何在 Batch 檔取得系統的日期、時間欄位 (第二版)

分享到噗浪!

去年曾經寫過 "如何在 Batch 檔取得系統的日期、時間欄位" 的文章,靠的是 date 與 time 指令,但缺點是時間的精確度只能到「分鐘」而已,這次我們改用 %date%%time% 環境變數,取得時間的精確度可達「百分之一秒」。

我們可以在 DOS 模式下用以下指令先測試出你的電腦輸出的格式,一般來說輸出的格式會受到 Windows 控制台中的「地區與語言選項」設定所影響,不過一般來說繁體中文的環境都不會有多大的變化,在使用前先確認一下輸出的格式是否跟我們所用的一致即可。

D:\>echo %date%
2008/12/06 星期六

D:\>echo %time%
21:47:59.49

首先,我們先取得今天日期的年、月、日

for /f "tokens=1-4 delims=-/ " %%i IN ("%date%") DO (
set year=%%i
set month=%%j
set day=%%k
)

再來,我們取得當下時間的時、分、秒、百分之一秒

for /f "tokens=1-4 delims=:." %%i IN ("%time%") DO (
set hour=%%i
set minute=%%j
set second=%%k
set centisecond=%%l
)

之後要組合含有日期、時間的字串就容易多了:

SET OutputDir=TEMP_%year%%month%%day%_%hour%_%minute%_%second%_%centisecond%
  

此文章由 will 發表於 2008/12/7 上午 12:27:25

永久連結 | 評論 (6) | 此文章的RSSRSS comment feed |

分類: 系統管理

標籤: , ,

評論

十二月 7. 2008 03:56

tomexou

關於hour,如何讓它自動補至2位數? 調過控制台時間格式,但無效,總是出現1個空白(早上時刻)。

tomexou 台灣

十二月 7. 2008 10:31

emisjerry

環境變數的處理在Windows 2000後有強化,例如:
rem 把日期裡的斜線拿掉;2008/10/21→20081021
set Today=%DATE:/=%

set ThisYear=%Today:~0,4%

rem 取回今天的年度月份;200810
set ThisMonth=%Today:~4,2%

rem 本月份減1取得上個月份
set /A LastMonth=%ThisMonth%-1

請參考:http://jdev.tw/blog/815/dos-get-month-batch

emisjerry 台灣

十二月 7. 2008 11:29

will

tomexou,
我的第一版有寫如何刪除多餘的空白。

for /f "tokens=1 delims= " %%i IN ("%hour%") DO (
set hour=%%i
)

will

十二月 7. 2008 11:33

will

emisjerry,
你這招不錯耶! 比用 for 來取得字串還精簡多了! 感謝您的分享!! ^_^

will 台灣

十二月 7. 2008 11:39

will

tomexou,
不好意思,我看錯你的問題了。
你若要補零的話很簡單,用我5分鐘前從emisjerry那邊學會的方式就可以了:

REM 把多餘的空白取代成 0
SET NowTime=%time: =0%

REM 取得時、分、秒
SET Hour=%NowTime:~0,2%
SET Minu=%NowTime:~3,2%
SET Seco=%NowTime:~6,2%

will 台灣

十二月 11. 2008 02:05

tomexou

非常感謝,我也漸漸寫一些script來從事軟體版本的nightly build,雖然我打算研究powershell,但batch簡單易用,還是有用處。

tomexou 台灣

新增評論


( 您輸入的Email不會顯示於網站上 )

  Country flag

biuquote
  • 評論
  • 線上預覽
Loading