批次檔的日期和時間操作
在日常的工作排程中,時間控制是少不了的,所以需要取得目前的日期和時間,而有些工作還會涉及到跨日執行,所以,記下批次檔昨天、今天、明天和時間的相關操控方式
工作環境:
Windows 11
時間與地區 > 語言與地區 > 地區 > 國家與地區:臺灣 ;地區格式:推薦項目
#昨天、今天、明天
#如果結果不如預期,你可能要利用上述的工作環境設定,檢查一下時間與地區的相關設定,因為使用不同的設定,日期與時間表示的格式和順序可能會有所不同
@echo off
setlocal enableextensions disabledelayedexpansion
REM 獲取當前日期和時間
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "td.YY=%dt:~2,2%"
set "td.YYYY=%dt:~0,4%"
set "td.MM=%dt:~4,2%"
set "td.DD=%dt:~6,2%"
REM 去掉日期元素的補零
set /a "y=%td.YYYY%", "m=100%td.MM% %% 100", "d=(100%td.DD% %% 100)"
REM 計算今天的日期
set "today.YYYY=%y%"
set "today.YY=%y:~-2%"
set "today.MM=%m:~-2%"
set "today.DD=%d:~-2%"
REM 計算明天的日期
set /a "d+=1"
REM 計算每月的天數
set /a "ml=30+((m+m/8) %% 2)" & if %m% equ 2 set /a "ml=ml-2+(3-y %% 4)/3-(99-y %% 100)/99+(399-y %% 400)/399"
REM 如果日期超過本月最大天數,調整為下個月
if %d% gtr %ml% set /a "d=1", "m=(m %% 12)+1", "y+=1"
REM 補零並設置明天的變數
set /a "m+=100", "d+=100"
set "tomorrow.YYYY=%y%"
set "tomorrow.YY=%y:~-2%"
set "tomorrow.MM=%m:~-2%"
set "tomorrow.DD=%d:~-2%"
REM 計算昨天的日期
set /a "d-=2"
REM 如果日期小於1,調整為上個月
if %d% lss 1 (
set /a "m=(m+10) %% 12 + 1"
if %m% equ 12 set /a "y-=1"
set /a "ml=30+((m+m/8) %% 2)" & if %m% equ 2 set /a "ml=ml-2+(3-y %% 4)/3-(99-y %% 100)/99+(399-y %% 400)/399"
set /a "d=%ml%"
)
REM 補零並設置昨天的變數
set /a "m+=100", "d+=100"
set "yesterday.YYYY=%y%"
set "yesterday.YY=%y:~-2%"
set "yesterday.MM=%m:~-2%"
set "yesterday.DD=%d:~-2%"
REM 顯示今天、昨天和明天的日期,確保格式一致 (別引用成了 today 格式不一樣的)
echo Yesterday: %yesterday.YYYY%/%yesterday.MM%/%yesterday.DD%
echo Today : %td.YYYY%/%td.MM%/%td.DD%
echo Tomorrow : %tomorrow.YYYY%/%tomorrow.MM%/%tomorrow.DD%
endlocal
# 配合 powershell 以便加減時間差(類 linux date 操作,可以 + - y m d h i s)
@echo off
:: powershell 加一年
:: (Get-Date).AddYears(1).ToString('yyyy-MM-dd HH:mm:ss')
:: powershell 减一年
:: (Get-Date).AddYears(-1).ToString('yyyy-MM-dd HH:mm:ss')
:: powershell 加一个月
:: (Get-Date).AddMonths(1).ToString('yyyy-MM-dd HH:mm:ss')
:: powershell 减一个月
:: (Get-Date).AddMonths(-1).ToString('yyyy-MM-dd HH:mm:ss')
:: powershell 加一天
:: (Get-Date).AddDays(1).ToString('yyyy-MM-dd HH:mm:ss')
:: powershell 减一天
:: (Get-Date).AddDays(-1).ToString('yyyy-MM-dd HH:mm:ss')
:: powershell 加一小时
:: (Get-Date).AddHours(1).ToString('yyyy-MM-dd HH:mm:ss')
:: powershell 减一小时
:: (Get-Date).AddHours(-1).ToString('yyyy-MM-dd HH:mm:ss')
:: powershell 加一分钟
:: (Get-Date).AddMinutes(1).ToString('yyyy-MM-dd HH:mm:ss')
:: powershell 减一分钟
:: (Get-Date).AddMinutes(-1).ToString('yyyy-MM-dd HH:mm:ss')
@echo off
REM 加一年
powershell -Command "(Get-Date).AddYears(1).ToString('yyyy/MM/dd HH:mm:ss')"
REM 减一年
today=powershell -Command "(Get-Date).AddYears(-1).ToString('yyyy-MM-dd')"
echo %today%
REM 加一个月
powershell -Command "(Get-Date).AddMonths(1).ToString('yyyy/MM/dd HH:mm:ss')"
REM 减一个月
powershell -Command "(Get-Date).AddMonths(-1).ToString('yyyy-MM-dd')"
REM 其他操作类似
# 日期和時間取相關欄位用
@echo off
echo %date%
:: 將/取代成空白
set Today=%date:/=%
echo %Today%
set year=%Today:~0,4%
set month=%Today:~4,2%
set day=%Today:~6,2%
echo month: %month%
:: 去除前導零
if 1%month% lss 110 (
set month=%Today:~5,1%
)
echo year: %year%
echo month: %month%
echo day: %day%
if %month%==1 (
set lastMonth=12
) else (
set lastMonth=%month%-1
)
set /A lastYear=%year%-1
echo lastYear: %lastYear%
echo lastMonth: %lastMonth%
::將空白取代成0
set now=%time: =0%
set hour=%now:~0,2%
set minu=%now:~3,2%
set seco=%now:~6,2%
echo hour: %hour%
echo minute: %minu%
echo second: %seco%
:: 去除前導零
if %hour:~0,1%==0 set hour=%hour:~1%
:: 設為數值格式
set /a hourNum=%hour%
echo %hourNum%
收工!
留言
張貼留言