[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=字串2
功能:把環境變數值的[字串1]替換成[字串2]
▼ 把日期的斜線換成星號
echo %DATE:/=*%
2019*12*15
▼ 把日期的斜線都刪掉
echo %DATE:/=%
20191215
通常我們都會拿YYYYMMDD這樣的日期來用,因為Windows命令的參數選項都是以 / 來指定的,因此最好不用使用帶有斜線的參數。
- 取子字串:用 ~ 和 ,
格式:環境變數:~開始位置[,長度]
開始位置由 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
解說影片
##
您可能也會有興趣的類似文章
- 在命令提示字元取得目前資料夾路徑的方法—使用set /p|初學者的命令行#10 (0則留言, 2021/04/22)
- 如何用批次指令取得上個月的月份-再修訂版 (12則留言, 2008/10/21)
- [DOS] 以set指令的替換字串功能來解決資料夾重覆附加的小問題 (0則留言, 2016/03/07)
- [Windows] 比對檔案時間並拷貝較新檔案的命令行作法 (0則留言, 2023/02/10)
- [Batch#2] 三個方便的Windows批次檔範例 (初學者的命令行 #6) (0則留言, 2019/12/26)
- [Windows] 去除環境變數DATE與TIME內的空白 (0則留言, 2008/04/20)
- [Vista] 設定環境變數SET命令的擴充 (0則留言, 2008/04/19)
- [Batch #4] 用批次檔簡化複雜的指令—直接叫用特定的ms-settings (初學者的命令行#8) (0則留言, 2020/08/15)
- [Windows] 刪除特定Java process的方法 (0則留言, 2017/08/02)
- 萬用影音轉檔程式:FFMpeg與HD專用的VideoConverter (0則留言, 2009/05/10)
- 開始使用Cygwin以取代cmd.exe (2則留言, 2007/01/11)
- [Windows] 環境變數的擴充功能 (1則留言, 2005/02/23)
- 快速找出類別所在jar檔的命令行工具:LibraryFinder (0則留言, 2016/02/18)
- 方便切換目錄的指令:PUSHD與POPD (0則留言, 2006/07/15)
- 替Prompt加上顏色 (1則留言, 2004/12/03)
站長您好,我想請問一下:
我的電腦系統是win98,由於程式古老的限制,導致我需要調到1993年使用,但是每次開機的時候電腦時間都會自動改成2093年,因此我想寫一個批次檔開機時啟動,然後自動更改年份,但不動到月日。
目前碰到的問題是,網路查詢後都是使用%DATE%來取得年月日的資料,再使用DATE來做設定,
但是我執行echo %date%時,會顯示echo is on而不會是時間資料,想請問還有什麼辦法可以做出這個批次檔嗎?
搜尋 RunAsDate,會彈窗讓你指定要執行的程式與日期。