CODE: [Copy to clipboard]
@echo off&color 1f&mode con lines=10&setlocal enabledelayedexpansion
title ***时间回溯批处理*** by cn-dos zw19750516
:begin
cls&echo.&echo ===============================================================================
echo 请输入要回溯的时间,请按年 月 日 时 分的格式正确输入,无数值的请输入0,中间请用空格格开,请不要在数值前补0,如:10 6 1 19 44(10年6个月1天19个小时44分钟),0 0 0 0 400(400分钟),而10 06 01 19 44和10 6以及10 6 0 0 0 0均为错误输入。
echo ===============================================================================
echo.&set /p times=请在此输入:
echo %times: =%|findstr "[^0-9]"&&goto wrong
for %%i in (%times%) do (
set /a n+=1&set str=%%i
if "!str:~,1!" equ "0" goto wrong
)
if !n! neq 5 goto wrong
set n=0
for /f "tokens=1-5 delims= " %%a in ("%times%") do set /a ys=%%a,ms=%%b,ds=%%c,hs=%%d,mis=%%e
set /a y=%date:~,4%,m=100%date:~5,2%%%100,d=100%date:~8,2%%%100,mi=100%time:~3,2%%%100
if "%time:~,1%"=="" (set h=%time:~1,1%) else (set h=%time:~,2%)
set /a a=%y%%%4,b=%y%%%100,c=%y%%%400
if %c% equ 0 (set yun=A) else (if %a% equ 0 if %b% neq 0 set yun=A)
if defined yun (set n=29) else (set n=28)
set /a mi-=mis,h-=hs,d-=ds,m-=ms,h-=hs
............................
:wrong
cls&echo.&echo.&echo 错误的数值,请正确输入&ping /n 2 127.1>nul&goto begin
[CODE: [Copy to clipboard]
@echo off
SET/p TT=你想知道多少天前的日期?
for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a p1=%%i,p2=100%%j%%100,p3=100%%k%%100
if %p3% gtr %TT% goto ppp
:nxt
set/a p2-=1
if %p2% equ 0 set/a p1-=1&&set p2=12
set/a PN2="!(p1%%4) & !(!(p1%%100)) | !(p1%%400)",PN2=28+PN2
for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3=%p3%+%%i
if %p3% leq %tt% goto nxt
:ppp
set/a p3=%p3%-%tt%
setlocal enabledelayedexpansion
for %%i in (p2 p3) do if !%%i! lss 10 set %%i=0!%%i!
echo %p1%年%p2%月%p3%日
pause&goto :eof
CODE: [Copy to clipboard]
@echo off
set/p times=输入年月日小时分
for /f "tokens=1-5 delims= " %%a in ("%times%") do set /a yy=%%a,mm=%%b,tt=%%c,hh=%%d,ss=%%e
for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a p1=%%i,p2=100%%j%%100,p3=100%%k%%100
for /f "tokens=1-3 delims=:" %%i in ('time/t') do set /a t1=100%%i%%100,t2=100%%j%%100
set/a s2=ss%%60,t1-=ss/60%%24,t2-=s2,hh+=ss/60
if %t2% lss 0 set/a t2+=60
if %t1% lss 0 set/a t1+=24
set/a h1=hh%%24,tt+=(hh-h1)/24,t1-=h1
if %t1% lss 0 set/a t1+=24,tt+=1
set/a p1-=yy
set/a m2=mm%%12,p1-=(mm+p2)/12,p2-=m2
if %p2% leq 0 set/a p2+=12
if %p3% gtr %TT% goto ppp
:nxt
set/a p2-=1
if %p2% equ 0 set/a p1-=1&&set p2=12
set/a PN2="!(p1%%4) & !(!(p1%%100)) | !(p1%%400)",PN2=28+PN2
for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3=%p3%+%%i
if %p3% leq %tt% goto nxt
:ppp
set/a p3=%p3%-%tt%
setlocal enabledelayedexpansion
for %%i in (p2 p3 t1 t2) do if !%%i! lss 10 set %%i=0!%%i!
echo %p1%年%p2%月%p3%日%t1%时%t2%分
pause&goto :eof