回复 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%COPY |
使用范例: | @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>nulCOPY |
|