Board logo

标题: [日期时间] [已解决]请教批处理根据当前系统日期,推演前7天的年、月、日 [打印本页]

作者: yakeyun    时间: 2024-6-4 13:18     标题: [已解决]请教批处理根据当前系统日期,推演前7天的年、月、日

本帖最后由 yakeyun 于 2024-6-5 08:55 编辑

请教一下各位大佬有没有好的办法完善一下下面代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1-3 delims=/-" %%a in ("%date%") do (
  3.     set "year=%%a"
  4.     set "month=%%b"
  5.     set "day=%%c"
  6. )
  7. rem 显示当前日期
  8. echo 当前日期: %year%年%month%月%day%日
  9. echo,
  10. rem 推算前7天的日期并显示
  11. set adN=0
  12. for /L %%i in (1, 1, 7) do (
  13.     set /a adN+=1
  14.     set /a "prev_day=%day%-%%i"
  15.     set "prev_month=!month!"
  16.     set "prev_year=!year!"
  17.         if !prev_day! equ 0 (set "prev_day=31" & set /a "prev_month=!month!-1")
  18.         if !prev_day! equ -1 (set "prev_day=30" & set /a "prev_month=!month!-1")
  19.         if !prev_day! equ -2 (set "prev_day=29" & set /a "prev_month=!month!-1")
  20.         if !prev_day! equ -3 (set "prev_day=28" & set /a "prev_month=!month!-1")
  21.         if !prev_day! equ -4 (set "prev_day=27" & set /a "prev_month=!month!-1")
  22.         if !prev_day! equ -5 (set "prev_day=26" & set /a "prev_month=!month!-1")
  23.         if !prev_day! equ -6 (set "prev_day=25" & set /a "prev_month=!month!-1")
  24. if !prev_day! geq 1 (if !prev_day! lss 10 (
  25. set /a "prev_day=!prev_day!
  26. set "prev_day=0!prev_day!"
  27. ))
  28. if !prev_month! geq 1 (if !prev_month! lss 10 (
  29. set /a "prev_month=!prev_month!"
  30. set "prev_month=0!prev_month!"
  31. ))
  32. if !month! equ 1 (if !day! equ 1 (set /a prev_month=12 & set /a prev_year=!year! - 1))
  33.         echo 前!adN!天日期为: !prev_year!年!prev_month!月!prev_day!日
  34. )
  35. pause>nul 2>nul
复制代码
上面为基础代码,获取当前系统的年,月,日。然后推演前7天的年月日,并输出显示出来。
已知问题如下:
1、无法自动判断当前年份有31还是30天,或者无法自动判断2月有28天还是29天。
2、遇到与8日期相关的数值,无法自动执行,系统会因为进制原因而无法处理。
作者: Batcher    时间: 2024-6-4 13:54

回复 1# yakeyun


批处理获取指定天数之前的日期
http://bbs.bathome.net/thread-3330-1-1.html
作者: hnfeng    时间: 2024-6-4 13:54

有网友写了函数的
http://bbs.bathome.net/redirect. ... tid=113&pid=352
作者: yakeyun    时间: 2024-6-4 19:07

回复 2# Batcher

已经参考第一个修改完毕,下面是整理后的代码,测试功能都正常,之前的BUG也都没有了:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1-3 delims=/-" %%a in ("%date%") do (
  3.     set "year=%%a"
  4.     set "month=%%b"
  5.     set "day=%%c"
  6. )
  7. rem 显示当前日期
  8. echo 当前日期: %year%年%month%月%day%日
  9. echo,
  10. rem 推算前7天的日期并显示
  11. set adN=0
  12. for /L %%i in (1, 1, 7) do (
  13. set /a adN+=1
  14. set DaysAgo=%%i
  15. for /f %%j in ('powershell -c "Get-Date (Get-Date).AddDays(-!DaysAgo!) -uformat "%%Y年%%m月%%d日""') do (
  16. set "DstDate=%%j"
  17. echo 前!adN!天日期为:!DstDate!
  18. )
  19. )
  20. pause>nul 2>nul
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2