本帖最后由 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]
复制代码
|