贴一下单条set的方案
利用了很多Set/a的错误检测特性
_%输入值%=1%输入值%
::利用运算符不存在检测判断输入值是否全数字
1/(年/1000) 和 1/(3000/年)
::利用被0除错误检测输入值中的年份是否1000<=年<=3000
%输入值:~7%/(9/1%输入值:~8%)
::利用运算符不存在和被0除错误检测输入值长度是否等于8
诸如此类 | @echo off & setlocal | | :loop | | set /p 输入值=按yyyymmdd格式输入日期,输入Q退出: | | if /i "%输入值%"=="q" goto :eof | | | | for %%v in (%输入值%) do set 输入值=%%v | | 2>nul set /a "_%输入值%=1%输入值%,%输入值:~7%/(9/1%输入值:~8%),年=1%输入值:~0,4%-10000,月=1%输入值:~4,2%-100,日=1%输入值:~6,2%-100,大月=!((月-1)*(月-3)*(月-5)*(月-7)*(月-8)*(月-10)*(月-12)),闰年=!(年%%4)&!(!(年%%100))|!(年%%400),1/((年/1000)*(3000/年)*(月/1)*(12/月)*(日/1)*(31/日)*(!(日/31)|大月)*(!(日/30)|(月-2))*(!(日/29)|(月-2)|闰年))"&&set 结果=合法||set 结果=非法 | | echo set/a检测'%输入值%'的结果:%结果%的日期 | | echo. | | goto :loop | | pauseCOPY |
|