[Batch#1] Windows批次檔-取得系統日期的簡單方法與環境變數字串操作 (初學者的命令行 #5)

雖然Windows有了Windows Terminal和PowerShell等腳本工具,但批次檔在簡單的需求狀況下還是很方便的選擇。

系統日期在產生備份檔等場合很常用,本文介紹批次檔裡取得系統日期的方法。

DATE環境變數

系統日期可由DATE環境變數取得,在DATE前後加上 % 即可取出其值:

d:\>echo %DATE%
2019/12/15

DATE的值受日期格式設定而有不同,可能是2019/1/2或2019/01/02等值,為了方便取成固定格式,最好把日期格式改成不足10的數字左補零的格式。以下指令皆預設日期格式固定為YYYY/MM/DD,長度為10個字元。

變更日期與時間格式必須透過控制台來修改,或使用下列批次檔直接變更登錄的值:

▼ date-fmt.bat

取出年、月、日

環境變數有下列幾種字串替換的操作:

  1. 取代:用冒號和等號

格式:環境變數:字串1=字串2
功能:把環境變數值的[字串1]替換成[字串2]

▼ 把日期的斜線換成星號

echo %DATE:/=*%
2019*12*15

▼ 把日期的斜線都刪掉

echo %DATE:/=%
20191215

通常我們都會拿YYYYMMDD這樣的日期來用,因為Windows命令的參數選項都是以 / 來指定的,因此最好不用使用帶有斜線的參數。

  1. 取子字串:用 ~ 和 ,

格式:環境變數:~開始位置[,長度]
開始位置由 0 起算 (Zero-based)
開始位置若為負值,表示由結尾向前
功能:環境變數的子字串操作

▼ 取日期變數的系統日(最後兩個字元)

echo %DATE:~-2%
15

備份檔是1至31日循環時,就能使用日數的方法。例如:

set DAY=%DATE:~-2%

"c:\Program Files\7-zip\7z.exe" a s:\backup\data-%DAY%.7z d:\backup\*.dat

另外,如何求出昨天或明天的日數呢?環境變數要運算只要使用set /A 即可。

set TODAY=%DATE:~-2%

set /A PREVDAY=%TODAY%-1
set /A NEXTDAY=%TODAY%+1

echo %PREVDAY%
14

echo %NEXTDAY%
16

▼ 取出月份(由第6個字元開始取2個字元)

echo %DATE:~5,2%
12

▼ 取出年度

echo %DATE:~0,4%
2019

解說影片

##

您可能也會有興趣的類似文章

簡睿

服務於軟體業的資訊老兵。興趣廣泛,學習力佳,樂於分享所知所學。

您可能也會喜歡…

2 個回應

  1. 俊毅表示:

    站長您好,我想請問一下:
    我的電腦系統是win98,由於程式古老的限制,導致我需要調到1993年使用,但是每次開機的時候電腦時間都會自動改成2093年,因此我想寫一個批次檔開機時啟動,然後自動更改年份,但不動到月日。

    目前碰到的問題是,網路查詢後都是使用%DATE%來取得年月日的資料,再使用DATE來做設定,
    但是我執行echo %date%時,會顯示echo is on而不會是時間資料,想請問還有什麼辦法可以做出這個批次檔嗎?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *