bat腳本得到前一天的日期的代碼
最近需要獲取當(dāng)前日期的前一天,今天日期為2024-5-17 12:54:24
但部分代碼只是不是所有機(jī)器通用。有些機(jī)器的%date%的格式本身就是2024-5-17,有的機(jī)器是2024/5/17 所以建議先稍微改一下bat中的delims=-,這個(gè)-就是分隔符,大家可以根據(jù)自己的需求修改即可。此代碼在2019 data center中測(cè)試通過(guò)。
實(shí)現(xiàn)代碼一
::判斷當(dāng)前日期的前一天 ::首先直接把天數(shù)減1天 ::如果出來(lái)的是0天就把月減1天,天數(shù)是當(dāng)月的最后一天。 ::如果出來(lái)的是0月就把年減1年,月數(shù)是當(dāng)年的最后一月。 @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
效果圖
實(shí)現(xiàn)代碼二
計(jì)算N天前的日期的bat腳本
@echo off rem 計(jì)算指定天數(shù)之前的日期 set DaysAgo=1 rem 假設(shè)系統(tǒng)日期的格式為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
效果圖
實(shí)現(xiàn)代碼三
@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
代碼輸出格式化需要自己額外加。不如上面兩個(gè)可以自定義格式
例如:240517 或者 20240517
實(shí)現(xiàn)代碼四
小編用了一點(diǎn)時(shí)間修復(fù)原來(lái)代碼的分割符號(hào)//或者,或者-的問(wèn)題
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 請(qǐng)按任意鍵退出 pause>nul
這段代碼比較好看,也比較精簡(jiǎn),大家使用過(guò)程中有什么問(wèn)題可以交流。
實(shí)現(xiàn)代碼五
@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
實(shí)現(xiàn)代碼六
@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
Windows自動(dòng)備份(每天、每月最后一天、每個(gè)周日),自動(dòng)清除備份命令
備份效果:保留最新7天的網(wǎng)站備份、最新4個(gè)周末的網(wǎng)站備份,每個(gè)月底的備份永久保留。
使用的WinRAR做文件壓縮,請(qǐng)自行安裝并注意命令中WinRAR的路勁、備份文件夾、存放路勁、3個(gè)異地存放路勁,根據(jù)應(yīng)用需要調(diào)整。
將該BAT文件配置到Windows“任務(wù)計(jì)劃程序”中,頻率為每天固定時(shí)間運(yùn)行(比如23點(diǎn)),即可實(shí)現(xiàn)自動(dòng)備份。
下面是關(guān)于備份命令的幾點(diǎn)簡(jiǎn)單說(shuō)明(詳細(xì)參數(shù)或用法請(qǐng)自行查詢?cè)敿?xì)資料了解):
命令中::代表注釋
set后定義的是變量名及值
%%之間加變量名,是取變量的值,%date:~0,4%指的是取系統(tǒng)時(shí)間中的前四位即年份數(shù)字
WinRAR壓縮,排除了帶.log的文件
xcopy即復(fù)制命令,/d指比較目標(biāo)和原目錄,目標(biāo)目錄為空則復(fù)制所有,否則只復(fù)制更新過(guò)的,/y指禁止提示確認(rèn)要覆蓋已存在的目標(biāo)文件
FORFILES命令,/P指定Path ,表明要從哪里開(kāi)始搜索;/M指按照條件搜索文件,默認(rèn)是*.* ;/C指在每個(gè)文件上運(yùn)行指定的Command 。帶有空格的命令字符串必須用引號(hào)括起來(lái)。默認(rèn)的Command 是"cmd /c echo @file";/D指選擇日期大于或等于(+ )(或者小于或等于(- ))指定日期的文件,不帶時(shí)間參數(shù)則代表與當(dāng)前日期比較
代碼中判斷是否是周日,使用的是“日”這個(gè)字,考慮的是中文環(huán)境,英文環(huán)境請(qǐng)自行修改
閏年判斷已經(jīng)調(diào)整為標(biāo)準(zhǔn)的閏年判斷條件(條件1:公歷年份是4的倍數(shù),且不是100的倍數(shù);條件2:公歷年份是整百數(shù)的,必須是400的倍數(shù)),%%代表取余
>>用來(lái)向文件中寫(xiě)日志
新補(bǔ)充:set /a m=%date:~5,2%*1 這一行有BUG,8月份帶出的數(shù)字是08,默認(rèn)識(shí)別為八進(jìn)制,且為不識(shí)別的八進(jìn)制數(shù)字。錯(cuò)誤信息:無(wú)效數(shù)字。數(shù)字常數(shù)只能是十進(jìn)制(17),十六位進(jìn)制(0x11)或 八進(jìn)制(021)。調(diào)整為:set m=%date:~5,2% 即可。因?yàn)楹竺嬉呀?jīng)有if %m:~0,1%==0 set /a m=%m:~1,1%*1 這句處理0開(kāi)頭的情況。
@echo off ::年月日字符串 set str_date=%date:~0,4%%date:~5,2%%date:~8,2% ::星期幾 set str_week_val=%date:~-1% ::本地要備份的文件夾路徑 set str_webpath_local=D:\wwwroot ::本地備份文件存放路徑 set str_path_local=D:\web_bak ::網(wǎng)站壓縮包名稱前綴 set str_rar_name=MH_WEB ::異地 備份路徑 set str_path_day=z:\最新7天網(wǎng)站備份 ::異地 備份路徑 set str_path_weekend=z:\最新4個(gè)周末的網(wǎng)站備份 ::異地 備份路徑 set str_path_month=z:\每個(gè)月底的網(wǎng)站備份 ::取兩位月份數(shù)字 set m=%date:~5,2% ::第一位為0則只取個(gè)位數(shù) if %m:~0,1%==0 set /a m=%m:~1,1%*1 ::取四位年份數(shù)字(這個(gè)命令用不到5位數(shù)那年吧) set /a x=%date:~0,4% ::閏年判斷條件1 %%代表取余 set /a y=%x%*1%%4 set /a y2=%x%*1%%100 ::閏年判斷條件2 %%代表取余 set /a y3=%x%*1%%400 ::默認(rèn)2月份只有28天 set ld=28 ::滿足閏年條件1 if %y%==0 ( if %y2% NEQ 0 set ld=29 ) ::滿足閏年條件2 if %y3%==0 set ld=29 for %%i in (1 3 5 7 8 10 12)do (if %m%==%%i set /a ld=31) for %%i in (4 6 9 11)do (if %m%==%%i set /a ld=30) ::echo 日期:%ld% ::pause ::當(dāng)月月底的年月日字符串 set str_monthend_val=%date:~0,4%%date:~5,2%%ld%% c: cd C:\Program Files\WinRAR\ echo %time%開(kāi)始?jí)嚎s >>%str_path_local%\%str_date%_log.bak rar a -u -x*.log* %str_path_local%\%str_rar_name%%str_date%.rar %str_webpath_local% echo %time%結(jié)束壓縮 >>%str_path_local%\%str_date%_log.bak echo. >>%str_path_local%\%str_date%_log.bak echo %time%開(kāi)始復(fù)制 >>%str_path_local%\%str_date%_log.bak if "%str_date%"=="%str_monthend_val%" ( xcopy %str_path_local%\%str_rar_name%%str_date%.rar %str_path_month% /d/y ) else ( if "%str_week_val%"=="日" ( xcopy %str_path_local%\%str_rar_name%%str_date%.rar %str_path_weekend% /d/y ::刪除4周前的rar文件 FORFILES /P %str_path_weekend% /M *.rar /D -22 /C "cmd /c echo %time% deleting..@file.. &del @file">>%str_path_local%\%str_date%_del.bak ) else ( xcopy %str_path_local%\%str_rar_name%%str_date%.rar %str_path_day% /d/y ::刪除7天前的rar文件 FORFILES /P %str_path_day% /M *.rar /D -7 /C "cmd /c echo %time% deleting..@file.. &del @file">>%str_path_local%\%str_date%_del.bak ) ) echo %time%結(jié)束復(fù)制 >>%str_path_local%\%str_date%_log.bak echo. >>%str_path_local%\%str_date%_log.bak ::刪除本地1天前的rar文件 FORFILES /P %str_path_local% /M *.rar /D -1 /C "cmd /c echo %time% deleting..@file.. &del @file">>%str_path_local%\%str_date%_del.bak ::刪除本地7天前的bak記錄文件 FORFILES /P %str_path_local% /M *.bak /D -7 /C "cmd /c echo %time% deleting..@file.. &del @file">>%str_path_local%\%str_date%_del.bak
到此這篇關(guān)于bat腳本得到前一天的日期的代碼的文章就介紹到這了,更多相關(guān)bat前一天日期內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在遠(yuǎn)程計(jì)算機(jī)的CMD內(nèi)下載FTP文件的方法
在遠(yuǎn)程計(jì)算機(jī)的CMD內(nèi)下載FTP文件的方法...2007-11-11批處理命令教學(xué)之復(fù)合語(yǔ)句連接符(&、&&和||)
這篇文章主要介紹了批處理命令教學(xué)之復(fù)合語(yǔ)句連接符(&、&&和||)的相關(guān)資料,需要的朋友可以參考下2015-03-03用bat實(shí)現(xiàn)刪除系統(tǒng)腳本調(diào)試程序
用bat實(shí)現(xiàn)刪除系統(tǒng)腳本調(diào)試程序...2007-02-02全盤(pán)搜索指定文件并拷貝到指定位置[自動(dòng)重命名]的批處理
全盤(pán)搜索指定文件并拷貝到指定位置[自動(dòng)重命名]的批處理2009-12-12windows find findstr命令(cmd查找文檔中的特定字符)
find 命令用于查找文檔中的特定字符和數(shù)字及行號(hào), 例如我們?cè)陂喿x文檔時(shí), 使用的快捷鍵 Ctrl + F 來(lái)查找是一個(gè)效果, 經(jīng)過(guò) find 查找的字符也可以重定向到一個(gè)文本文檔里面去, 提取特定的字符, 來(lái)進(jìn)行文檔的整合2025-03-03