虽然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

@echo Windows Registry Editor Version 5.00 > date-fmt.reg
@echo.>> date-fmt.reg
@echo [HKEY_CURRENT_USER\Control Panel\International]>> date-fmt.reg
@echo "s1159"="上午">> date-fmt.reg
@echo "s2359"="下午">> date-fmt.reg
@echo "sLongDate"="yyyy'年'MM'月'dd'日'">> date-fmt.reg
@echo "sShortDate"="yyyy/MM/dd">> date-fmt.reg
@echo "sTime"=":">> date-fmt.reg
@echo "sTimeFormat"="HH:mm:ss">> date-fmt.reg
@echo "sShortTime"="HH:mm">> date-fmt.reg
@echo "sYearMonth"="yyyy'年'M'月'">> date-fmt.reg
@echo.

regedit date-fmt.reg

取出年、月、日

环境变量有下列几种字串替换的操作:

  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

解说視頻

##

0
0