170人参与 • 2024-06-10 • Dos/bat
最近需要获取当前日期的前一天,今天日期为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前一天日期内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论