本帖最后由 aloha20200628 于 2024-8-25 16:18 编辑
精简了45楼代码中的操作步骤和合法性核查逻辑,行数减至18行,8个goto减至2个...
操作步骤要点》
双引号排查
输入长度排查
定界符及其错位排查
日月值全数字排查
日月相关变化所对应的字典变量 以及 平闰年天数增减修正
全程严防 &!"^ 等特殊字符雷劈的对策...
再次感谢各位细心测试反馈 就算是一场把纯P贯彻到底的基本功组合复习吧...
| @echo off &setlocal | | set/a "_1=31,_2=28,_3=31,_4=30,_5=31,_6=30,_7=31,_8=31,_9=30,_10=31,_11=30,_12=31,y=%date:~,4%%%4" | | if %y% equ 0 set "_2=29" | | :[md_loop] | | set "$md=" &set "c=" &set/p "$md=输入日期(月值/日值):" | | if not defined $md endlocal&exit/b | | setlocal enabledelayedexpansion &set #md=!$md:"=! | | if "!#md!"=="!$md!" if "!$md:~5!"=="" if "!$md:~4,1!" neq "" if "!$md:~2,1!"=="/" ( | | set "m=!$md:~0,2!"&set "d=!$md:~3!" | | for /f "delims=0123456789/" %%n in ("!$md!") do set "c=1" | | if not defined c goto[ok] ) | | echo,非法&endlocal&goto[md_loop] | | :[ok] | | if "!m:~0,1!" equ "0" set "m=!m:~1!" | | set "_m=_!m!" &set "w=非法" | | if "!d:~0,1!" equ "0" set "d=!d:~1!" | | if !d! gtr 0 if !d! leq !%_m%! set "w=合法" | | echo,!w!&endlocal&goto[md_loop]COPY |
|