广告位联系
返回顶部
分享到

bat脚本得到前一天的日期的代码

DOS/BAT 来源:互联网 作者:佚名 发布时间:2024-05-19 10:20:46 人浏览
摘要

最近需要获取当前日期的前一天,今天日期为2024-5-17 12:54:24 但部分代码只是不是所有机器通用。有些机器的%date%的格式本身就是2024-5-17,有的机器是2024/5/17 所以建议先稍微改一下bat中的delim

最近需要获取当前日期的前一天,今天日期为2024-5-17 12:54:24

但部分代码只是不是所有机器通用。有些机器的%date%的格式本身就是2024-5-17,有的机器是2024/5/17 所以建议先稍微改一下bat中的delims=-,这个-就是分隔符,大家可以根据自己的需求修改即可。此代码在2019 data center中测试通过。

实现代码一

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

::判断当前日期的前一天

::首先直接把天数减1天

::如果出来的是0天就把月减1天,天数是当月的最后一天。

::如果出来的是0月就把年减1年,月数是当年的最后一月。

@echo off

set yyyy=%date:~2,2%

set mm=%date:~5,2%

set dd=%date:~8,2%

set /a od=%dd%-1

if %od%==0 call :dd0

if %mm%==0 call :mm0

set yestaday=%yyyy%%mm%%od%

echo %yestaday%

pause

:dd0

set /a mm=%mm%-1

for %%a in (1 3 5 7 8 10 12)do set %%add=31

set /a pddd=%yyyy%*10/4

set pd2d=%pddd:~-1,1%

set 2dd=28

if %pd2d%==0 set 2dd=29

for %%b in (4 6 9 11)do set %%bdd=30

set od=%%mm%dd%

goto :eof

:mm0

set /a yyyy=%yyyy%-1

set mm=12 && set od=31

goto :eof

效果图

实现代码二

计算N天前的日期的bat脚本

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

@echo off

rem 计算指定天数之前的日期

set DaysAgo=1

rem 假设系统日期的格式为yyyy-mm-dd

call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays

set /a PassDays-=%DaysAgo%

call :DaysToDate %PassDays% DstYear DstMonth DstDay

set DstDate=%DstYear%-%DstMonth%-%DstDay%

echo %DaysAgo%天的日期是%DstDate%

pause

goto :eof

 

:DateToDays %yy% %mm% %dd% days

setlocal ENABLEEXTENSIONS

set yy=%1&set mm=%2&set dd=%3

if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)

set /a dd=100%dd%%%100,mm=100%mm%%%100

set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2

set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633

endlocal&set %4=%j%&goto :EOF

 

:DaysToDate %days% yy mm dd

setlocal ENABLEEXTENSIONS

set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a

set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5

set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10

(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)

endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF

效果图

实现代码三

1

2

3

4

5

6

@echo off

echo wscript.echo dateadd("d",-1,now())>x.vbs

for /f %%i in ('cscript /nologo x.vbs') do set d=%%i

del x.vbs

echo %d%

pause

代码输出格式化需要自己额外加。不如上面两个可以自定义格式

例如:240517 或者 20240517

实现代码四

小编用了一点时间修复原来代码的分割符号//或者,或者-的问题

1

2

3

4

5

6

7

8

9

10

echo off

echo wscript.echo dateadd("d",-1,now())>vbs.vbs

for /f %%a in ('cscript /nologo vbs.vbs') do del vbs.vbs&&set yyyymmdd=%%a

for /f "tokens=1,2,3* delims=-" %%i in ('echo %yyyymmdd%') do set yyyy=%%i&set mm=%%j&set dd=%%k

if %mm% LSS 9 set mm=0%mm%

if %dd% LSS 9 set dd=0%dd%

set yesterday=%yyyy%-%mm%-%dd%

echo 昨天是:%yesterday%

echo 请按任意键退出

pause>nul

这段代码比较好看,也比较精简,大家使用过程中有什么问题可以交流。

实现代码五

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

@echo off

set "today=%date%"

set "year=%today:~0,4%"

set "month=%today:~5,2%"

set "day=%today:~8,2%"

set /A "day=day-1"

if %day%==0 (

    set /A "month=month-1"

    if %month%==0 (

        set /A "year=year-1"

        set "month=12"

    )

    if %month%==1 set "month=01"

    if %month%==2 set "month=02"

    if %month%==3 set "month=03"

    if %month%==4 set "month=04"

    if %month%==5 set "month=05"

    if %month%==6 set "month=06"

    if %month%==7 set "month=07"

    if %month%==8 set "month=08"

    if %month%==9 set "month=09"

    set /A "last_day=30+(month+month/8)%%2"

    set "day=%last_day%"

)

if %day%==1 set "day=01"

if %day%==2 set "day=02"

if %day%==3 set "day=03"

if %day%==4 set "day=04"

if %day%==5 set "day=05"

if %day%==6 set "day=06"

if %day%==7 set "day=07"

if %day%==8 set "day=08"

if %day%==9 set "day=09"

echo %year%-%month%-%day%

pause

实现代码六

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

@echo off

setlocal enabledelayedexpansion

set "timestamp=%date%"

set "year=%timestamp:~0,4%"

set "month=%timestamp:~5,2%"

set "day=%timestamp:~8,2%"

set /A "day=day-1"

if %day%==0 (

    set /A "month=month-1"

    if !month!==00 (

        set /A "year=year-1"

        set "month=12"

    )

    for %%m in (01 02 03 04 05 06 07 08 09 10 11 12) do (

        if !month!==%%m (

            if "!month!" lss 10 (

                set "month=0!month!"

            )

        )

    )

    set /A "last_day=30+(month+month/8)%%2"

    set "day=!last_day!"

)

for %%d in (01 02 03 04 05 06 07 08 09) do (

    if !day!==%%d (

        set "day=0!day!"

    )

)

echo %year%-%month%-%day%

pause


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计