回复 40# qzwqzw
正好写过日期检查函数,也贴个单 set 方案。
函数体:- :ChechDate Date(YYYYMMDD)
- ::检查日期是否合法,合法时将改变 errorlevel 变量的值为 0,非法时为 1,参数格式错误时不作改变
- setlocal disabledelayedexpansion
- set/a"1/((date=%~1)/10000)" 2>nul||echo call :ChechDate Date(YYYYMMDD)&&exit/b
- set/a"b=1,y=%date:~,-4%,m=1%date:~-4,2%-100,d=1%date:~-2%-100,test=!(y%%4|!(y%%100)*!!(y%%400))*!(m^2)+(m+m/8)%%2-2*!(m^2)+30,b=0/(test/d*!(m/13))" 2>nul&&echo Right||echo Wrong
- exit/b%b%
复制代码 使用范例:- @echo off
- echo 20111215
- call CheckDate 20111215
- echo %%errorlevel%%=%errorlevel%
- ::一个正确的日期
- echo;
- echo 20110229
- call CheckDate 20110229
- echo %%errorlevel%%=%errorlevel%
- ::一个错误的日期
- echo;
- echo 20120229
- call CheckDate 20120229 >nul
- if errorlevel 1 (echo 错误) else echo 正确
- echo 可以用 if errorlevel 判断
- ::也可以用连接符进行正误判断并自定义操作
- echo;
- echo 20120100
- call CheckDate 20120100 >nul&&echo 正确||echo 错误
- echo 也可以用管道符判断正误
- ::也可以用连接符进行正误判断并自定义操作
- pause>nul
复制代码
|