從 Batch 取得日期時間還真囉唆,每次都要查資料 Copy / Paste 才能寫出計算日期時間的指令碼,最近有有需求要抓到「上一個月」的年份與月份,所以有用到數值運算的指令 ( SET /A ),所以乘機再整理一遍取得日期、時間欄位的程式碼。
取得今天日期 ( 其中 P0 代表「不滿 10 自動補零」的意思 )
REM 取得今天的年、月、日 (自動補零) SET TodayYear=%date:~0,4% SET TodayMonthP0=%date:~5,2% SET TodayDayP0=%date:~8,2% REM 取得今天的年、月、日 (純數字) REM 2010/08/03 更新:以下是為了修正 Batch 遇到 08, 09 會視為八進位的問題 IF %TodayMonthP0:~0,1% == 0 ( SET /A TodayMonth=%TodayMonthP0:~1,1%+0 ) ELSE ( SET /A TodayMonth=TodayMonthP0+0 ) IF %TodayMonthP0:~0,1% == 0 ( SET /A TodayDay=%TodayDayP0:~1,1%+0 ) ELSE ( SET /A TodayDay=TodayDayP0+0 ) echo 日期 %TodayYear%/%TodayMonth%/%TodayDay% echo 日期 %TodayYear%/%TodayMonthP0%/%TodayDayP0%
取得上個月的年、月 ( 其中 P0 代表「不滿 10 自動補零」的意思 )
REM 取得上個月的年、月 SET /A LastMonthYear=%TodayYear%+0 SET /A LastMonthMonth=%TodayMonth%-1 SET /A LastMonthMonthP0=%LastMonthMonth% REM 修正年份與月份的數值 IF %LastMonthMonth% EQU 0 (SET /A LastMonthYear=%thisYear%-1) IF %LastMonthMonth% EQU 0 (SET LastMonthMonth=12) IF %LastMonthMonth% LSS 10 (SET LastMonthMonthP0=0%LastMonthMonth%) echo 日期 %LastMonthYear%/%LastMonthMonth% echo 日期 %LastMonthYear%/%LastMonthMonthP0%
取得當下時間 ( 時、分、秒、豪秒 )
REM 取得時、分、秒 、豪秒 SET Hour=%NowTime:~0,2% SET Minute=%NowTime:~3,2% SET Second=%NowTime:~6,2% SET /A Millisecond=%NowTime:~9,2%*10 echo 時間 %Hour%:%Minute%:%Second%.%Millisecond%
上述關於取得「上個月」的年、月的重點就在於 Batch 可以提供基本的數學運算。另外對於 %time% 的精準度只有到「百分之一秒」,為了改以表達「豪秒」表達所以我將取得的數字乘以 10 處理。
執行 HELP SET 指令後關於 /A 選項(switch)的說明如下:
/A 指定在等號右方的字串是一個要被運算的數字運算式。您可以用運算式進行簡單的運算,而且支援下列 的運算子 (依照運算優先順序由高到低排列): () - 組成一群 ! ~ - - 一元運算符 * / % - 數字運算元 + - - 數字運算元 << >> - 邏輯位移 & - 位元運算 and ^ - 位元運算 exclusive or | - 位元運算 or = *= /= %= += –= - 指定 &= ^= |= <<= >>= , - 運算式分隔字元 如果您使用了任何邏輯或餘數運算子,您必須將運算式兩邊括上引號。任何在運算式中非數字的字串會 被當作環境變數,並且在使用前會先將這些環境變數轉換為數字。如果您所指定的環境變數名稱尚未在 目前環境中定義,那麼它的值會被設為 0。這可以讓您用環境變數值來做運算,而不必打入所有的 % 符號來取得它的值。如果 SET /A 是用指令檔之外的命令列執行,它會顯示運算式最後的數值。指定運 算子需要有個環境變數在等號的左方。0x 字首在數字前方代表十六進位數字、0b 字首代表二進位數字 或 0 字首代表八進位數字,否則數字值都是指十進位數字。所以 0x12 就和 18、022 等相同。請注意 八進位數字可能容易弄錯: 像 08 和 09 就不是正確的數字,因為 8 和 9 並不是八進位的正確數字。
相關連結
沒有留言:
張貼留言