
离线 TA的专栏
- 打卡等级:偶尔看看
- 打卡总天数:14
- 打卡月天数:0
- 打卡总奖励:197
- 最近打卡:2023-08-27 07:17:53
|
最近需要获取当前日期的前一天,今天日期为2024-5-17 12:54:24
但部分代码只是不是所有机器通用。有些机器的%date%的格式本身就是2024-5-17,有的机器是2024/5/17 所以建议先稍微改一下bat中的delims=-,这个-就是分隔符,大家可以根据自己的需求修改即可。此代码在2019 data center中测试通过。
实现代码一
- ::判断当前日期的前一天
- ::首先直接把天数减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脚本 - @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
复制代码效果图
实现代码三
- @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
实现代码四
小编用了一点时间修复原来代码的分割符号//或者,或者-的问题 - 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
复制代码这段代码比较好看,也比较精简,大家使用过程中有什么问题可以交流。
实现代码五
- @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
复制代码 实现代码六
- @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
复制代码到此这篇关于bat脚本得到前一天的日期的代码的文章就介绍到这了,更多相关bat前一天日期内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:  进行删除处理。
4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
|