亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

bat腳本得到前一天的日期的代碼

 更新時間:2024年07月08日 12:28:22   作者:mdxy  
這篇文章主要介紹了bat腳本得到前一天的日期的代碼,腳本之家小編對比了網(wǎng)上很多代碼,每個代碼都經(jīng)過測試,修復了部分錯誤,需要的朋友可以參考一下

最近需要獲取當前日期的前一天,今天日期為2024-5-17 12:54:24

但部分代碼只是不是所有機器通用。有些機器的%date%的格式本身就是2024-5-17,有的機器是2024/5/17 所以建議先稍微改一下bat中的delims=-,這個-就是分隔符,大家可以根據(jù)自己的需求修改即可。此代碼在2019 data center中測試通過。

實現(xiàn)代碼一

::判斷當前日期的前一天
::首先直接把天數(shù)減1天
::如果出來的是0天就把月減1天,天數(shù)是當月的最后一天。
::如果出來的是0月就把年減1年,月數(shù)是當年的最后一月。
@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

效果圖

實現(xiàn)代碼二

計算N天前的日期的bat腳本

@echo off
rem 計算指定天數(shù)之前的日期
set DaysAgo=1
rem 假設系統(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

效果圖

實現(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

代碼輸出格式化需要自己額外加。不如上面兩個可以自定義格式

例如:240517 或者 20240517

實現(xià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 請按任意鍵退出
pause>nul

這段代碼比較好看,也比較精簡,大家使用過程中有什么問題可以交流。

實現(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

實現(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自動備份(每天、每月最后一天、每個周日),自動清除備份命令

備份效果:保留最新7天的網(wǎng)站備份、最新4個周末的網(wǎng)站備份,每個月底的備份永久保留。

使用的WinRAR做文件壓縮,請自行安裝并注意命令中WinRAR的路勁、備份文件夾、存放路勁、3個異地存放路勁,根據(jù)應用需要調整。

將該BAT文件配置到Windows“任務計劃程序”中,頻率為每天固定時間運行(比如23點),即可實現(xiàn)自動備份。

下面是關于備份命令的幾點簡單說明(詳細參數(shù)或用法請自行查詢詳細資料了解):

命令中::代表注釋
set后定義的是變量名及值
%%之間加變量名,是取變量的值,%date:~0,4%指的是取系統(tǒng)時間中的前四位即年份數(shù)字
WinRAR壓縮,排除了帶.log的文件
xcopy即復制命令,/d指比較目標和原目錄,目標目錄為空則復制所有,否則只復制更新過的,/y指禁止提示確認要覆蓋已存在的目標文件
FORFILES命令,/P指定Path ,表明要從哪里開始搜索;/M指按照條件搜索文件,默認是*.* ;/C指在每個文件上運行指定的Command 。帶有空格的命令字符串必須用引號括起來。默認的Command 是"cmd /c echo @file";/D指選擇日期大于或等于(+ )(或者小于或等于(- ))指定日期的文件,不帶時間參數(shù)則代表與當前日期比較
代碼中判斷是否是周日,使用的是“日”這個字,考慮的是中文環(huán)境,英文環(huán)境請自行修改
閏年判斷已經(jīng)調整為標準的閏年判斷條件(條件1:公歷年份是4的倍數(shù),且不是100的倍數(shù);條件2:公歷年份是整百數(shù)的,必須是400的倍數(shù)),%%代表取余
>>用來向文件中寫日志
新補充:set /a m=%date:~5,2%*1 這一行有BUG,8月份帶出的數(shù)字是08,默認識別為八進制,且為不識別的八進制數(shù)字。錯誤信息:無效數(shù)字。數(shù)字常數(shù)只能是十進制(17),十六位進制(0x11)或 八進制(021)。調整為:set  m=%date:~5,2% 即可。因為后面已經(jīng)有if %m:~0,1%==0 set /a m=%m:~1,1%*1 這句處理0開頭的情況。

@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個周末的網(wǎng)站備份
::異地 備份路徑
set str_path_month=z:\每個月底的網(wǎng)站備份
::取兩位月份數(shù)字
set m=%date:~5,2%
::第一位為0則只取個位數(shù)
if %m:~0,1%==0 set /a m=%m:~1,1%*1
::取四位年份數(shù)字(這個命令用不到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
::默認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
::當月月底的年月日字符串
set str_monthend_val=%date:~0,4%%date:~5,2%%ld%%
c:
cd C:\Program Files\WinRAR\
echo %time%開始壓縮 >>%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%結束壓縮 >>%str_path_local%\%str_date%_log.bak
echo. >>%str_path_local%\%str_date%_log.bak
echo %time%開始復制 >>%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%結束復制 >>%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

到此這篇關于bat腳本得到前一天的日期的代碼的文章就介紹到這了,更多相關bat前一天日期內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論