[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【挑战】利用批处理命令findstr判断输入日期的合法性

要求:
  编写纯批处理对输入的日期进行合法性判断

  必须用且只能用一次findstr进行判断,模式为echo %str%|findstr

      请对代码进行简要的说明,至少讲清楚你的思路


  合法性:

    1、输入为8个纯数字,如:20100529(yyyymmdd)

    2、年份为1000-3000年,允许对平闰年进行计算判断

    3、月份合理性判断

    4、日期合理性判断,特别注意对2月日期的判断
附截图如下:
***共同提高***

本帖最后由 abcdshenji 于 2011-5-29 18:37 编辑
  1. @echo off||检查日期合法性(yyyymmdd)
  2. :top
  3. cls
  4. set /p dt=Enter date:
  5. echo %dt%|findstr "^[0-9]*$">nul||(call :lp "日期只能是数字")
  6. if %dt% gtr 10000000 (
  7. if %dt% lss 30000000 (ver>nul) else (
  8. call :lp "只能是3000年以内"
  9. )
  10. ) else (
  11. call :lp "不足1000年"
  12. )
  13. set/a y=%dt%/10000,m=%dt%%%10000/100,d=%dt%%%100
  14. set "ds=312831303130313130313031"
  15. for /l %%i in (1 1 12) do (
  16. if %m% equ %%i (
  17. set /a n=%m%*2
  18. setlocal enabledelayedexpansion
  19. set n=!n:~-2!
  20. endlocal
  21. )
  22. )
  23. if %d% gtr 0 (
  24. if %d% leq %n% (call :lp "合法") else (
  25. call :lp "%m%月没有%d%天"
  26. )
  27. ) else call :lp "天数不能是0"
  28. pause>nul&goto :top
  29. :lp
  30. echo %~1&pause>nul&goto :top
  31. goto :EOF
复制代码
没有进行平润年判断。。。这么多if else没什么效率可言就是了。。凑合着看吧。。
1

评分人数

    • batman: 参与了就是好的,呵呵PB + 5

TOP

楼上是不是没看清楚题意,只有findstr就能判断出来啊,还要这么多代码做什么?
***共同提高***

TOP

只能用一次findstr就能检查这么多要求哦。。原谅我水平非常有限。。唉在batman面前实在是丢脸了。。

TOP

4# abcdshenji
兄弟怎么说的话,大家都是学习者,不过这题能叫挑战,肯定不是这么简单,在findstr有限的正则上多想想。。。
***共同提高***

TOP

findstr 支持的正则太少了,早就想过。
除非 连续几个 findstr | findstr  这样。

TOP

本帖最后由 batman 于 2011-5-30 08:51 编辑

6# caruko
全文只有一个findstr,正如题意所描述的。。。

带显示命令和pause命令这两行总共应在五行代码内吧。。。
***共同提高***

TOP

没有分组功能 (ab)|(cd) 这样,这个真的可以做到?

TOP

8# caruko
看到我的载图不,这不是做到了吗?呵呵。。。,当然肯定还有其他好办法的。。。
***共同提高***

TOP

不知man的思路是否源于那个以前JM写的那个判断IP格式合法的批处理...

正则不是很懂,贴上其它的代码,^_^
  1. @echo off
  2. set currdate=%date:~0,10%
  3. set /p input=input:
  4. echo %input:~0,4%%date:~4,1%%input:~4,2%%date:~4,1%%input:~6,2% | date >nul && (echo.合法.& echo %currdate% | date >nul) || echo.非法.
  5. pause
复制代码

TOP

!~

本帖最后由 cjiabing 于 2011-5-30 09:45 编辑

见过随风写的判断ip的!~
用到for 吗?
难道只用一个findstr命令?
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

本帖最后由 batman 于 2011-5-30 09:46 编辑

10# lxzzr
不是源自,是很相似,但这个情况肯定复杂得多。。。

ps:代码不要跑题哦。。。
***共同提高***

TOP

11# cjiabing

用且只用一次findstr命令不是很难懂吧。。。
***共同提高***

TOP

13# batman
哈哈,希望你透露更多信息,似乎你已经做出来了!~
对findstr的运用没那么熟,向你们学习!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

14# cjiabing

是呀,我曾经断言做不出,没想到硬是给他做出来了。。。虽然代码看起来有点“恐怖”
技术问题请到论坛发帖求助!

TOP

返回列表