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


哈哈,我也想到那块去了:
  1. @echo off
  2. set /p test=请输入日期
  3. xcopy>nul 2>nul /l /d:%test:~-4,2%-%test:~-2%-%test:0,-4% %tmp%&&echo 日期合法||echo 日期不合法
  4. pause
复制代码

TOP

20# caruko


晕,看来又撞车了

TOP

另外,如果只是用findstr判断平润年,还是可行的

TOP

判断年份能被4整除很容易:
echo 20080102|findstr /e "[02468][048].... [13579][26]...."
若要同时对百位判断,只需要把这两条关键词排列组合成四条关键词就行了。
不过如果和日期放在一起排列组合,那...
1

评分人数

    • qzwqzw: 感谢提供闰年思路,只是不知是否原创?技术 + 1

TOP

38# qzwqzw


单条set不难,单条算式倒是比较麻烦,不过貌似也有捷径

TOP

回复 40# qzwqzw


    正好写过日期检查函数,也贴个单 set 方案。
函数体:
  1. :ChechDate Date(YYYYMMDD)
  2. ::检查日期是否合法,合法时将改变 errorlevel 变量的值为 0,非法时为 1,参数格式错误时不作改变
  3. setlocal disabledelayedexpansion
  4. set/a"1/((date=%~1)/10000)" 2>nul||echo call :ChechDate Date(YYYYMMDD)&&exit/b
  5. 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
  6. exit/b%b%
复制代码
使用范例:
  1. @echo off
  2. echo 20111215
  3. call CheckDate 20111215
  4. echo   %%errorlevel%%=%errorlevel%
  5. ::一个正确的日期
  6. echo;
  7. echo 20110229
  8. call CheckDate 20110229
  9. echo   %%errorlevel%%=%errorlevel%
  10. ::一个错误的日期
  11. echo;
  12. echo 20120229
  13. call CheckDate 20120229 >nul
  14. if errorlevel 1 (echo 错误) else echo 正确
  15. echo   可以用 if errorlevel 判断
  16. ::也可以用连接符进行正误判断并自定义操作
  17. echo;
  18. echo 20120100
  19. call CheckDate 20120100 >nul&&echo 正确||echo 错误
  20. echo   也可以用管道符判断正误
  21. ::也可以用连接符进行正误判断并自定义操作
  22. pause>nul
复制代码

TOP

返回列表