6
A
回答
6
找到一个脚本,可以确保您获得前一天,即使年份或月份发生变化Dos Yesterday Batch。
@echo off
set yyyy=
set $tok=1-3
for /f "tokens=1 delims=.:/-, " %%u in ('date /t') do set $d1=%%u
if "%$d1:~0,1%" GTR "9" set $tok=2-4
for /f "tokens=%$tok% delims=.:/-, " %%u in ('date /t') do (
for /f "skip=1 tokens=2-4 delims=/-,()." %%x in ('echo.^|date') do (
set %%x=%%u
set %%y=%%v
set %%z=%%w
set $d1=
set $tok=))
if "%yyyy%"=="" set yyyy=%yy%
if /I %yyyy% LSS 100 set /A yyyy=2000 + 1%yyyy% - 100
set CurDate=%mm%/%dd%/%yyyy%
set dayCnt=%1
if "%dayCnt%"=="" set dayCnt=1
REM Substract your days here
set /A dd=1%dd% - 100 - %dayCnt%
set /A mm=1%mm% - 100
:CHKDAY
if /I %dd% GTR 0 goto DONE
set /A mm=%mm% - 1
if /I %mm% GTR 0 goto ADJUSTDAY
set /A mm=12
set /A yyyy=%yyyy% - 1
:ADJUSTDAY
if %mm%==1 goto SET31
if %mm%==2 goto LEAPCHK
if %mm%==3 goto SET31
if %mm%==4 goto SET30
if %mm%==5 goto SET31
if %mm%==6 goto SET30
if %mm%==7 goto SET31
if %mm%==8 goto SET31
if %mm%==9 goto SET30
if %mm%==10 goto SET31
if %mm%==11 goto SET30
REM ** Month 12 falls through
:SET31
set /A dd=31 + %dd%
goto CHKDAY
:SET30
set /A dd=30 + %dd%
goto CHKDAY
:LEAPCHK
set /A tt=%yyyy% %% 4
if not %tt%==0 goto SET28
set /A tt=%yyyy% %% 100
if not %tt%==0 goto SET29
set /A tt=%yyyy% %% 400
if %tt%==0 goto SET29
:SET28
set /A dd=28 + %dd%
goto CHKDAY
:SET29
set /A dd=29 + %dd%
goto CHKDAY
:DONE
if /I %mm% LSS 10 set mm=0%mm%
if /I %dd% LSS 10 set dd=0%dd%
REM Set IIS and AWS date variables
set IISDT=%yyyy:~2,2%%mm%%dd%
set AWSDT=%yyyy%-%mm%-%dd%
3
@echo off
:: Strip the day of the week from the current date
FOR %%A IN (%Date%) DO SET Today=%%A
:: Parse the date, prefix day and month with an extra leading zero
FOR /F "tokens=1-3 delims=/" %%A IN ("%Today%") DO (
SET Day=0%%A
SET Month=0%%B
SET Year=%%C
)
:: Remove excess leading zeroes
SET Day=%Day:~-2%
SET Month=%Month:~-2%
:: Display the results
SET Day
SET Month
SET Year
:: Convert to Julian date
CALL :JDate %Year% %Month% %Day%
:: Display the result
SET JDate
:: Subtract 1 day
SET /A JPast = JDate - 1
:: Display the result
SET JPast
:: Convert back to "normal" date again
CALL :GDate %JPast%
:: Display the result
::SET GDate=20130121
SET GDate
echo The previous day in form YYYYMMDD is %GDate%
pause
::::::::::::::::::::::::::::::::::::::::::::::::::::::
GOTO:EOF
:JDate
:: Convert date to Julian
:: Arguments : YYYY MM DD
:: Returns : Julian date
::
:: First strip leading zeroes
SET MM=%2
SET DD=%3
IF %MM:~0,1% EQU 0 SET MM=%MM:~1%
IF %DD:~0,1% EQU 0 SET DD=%DD:~1%
::
:: Algorithm based on Fliegel-Van Flandern
:: algorithm from the Astronomical Almanac,
:: provided by Doctor Fenton on the Math Forum
:: (http://mathforum.org/library/drmath/view/51907.html),
:: and converted to batch code by Ron Bakowski.
SET /A Month1 = (%MM% - 14)/12
SET /A Year1 = %1 + 4800
SET /A JDate = 1461 * (%Year1% + %Month1%)/4 + 367 * (%MM% - 2 -12 * % Month1%)/12 - (3 * ((%Year1% + %Month1% + 100)/100))/4 + %DD% - 32075
SET Month1=
SET Year1=
GOTO:EOF
:GDate
:: Convert Julian date back to "normal" Gregorian date
:: Argument : Julian date
:: Returns : YYYY MM DD
::
:: Algorithm based on Fliegel-Van Flandern
:: algorithm from the Astronomical Almanac,
:: provided by Doctor Fenton on the Math Forum
:: (http://mathforum.org/library/drmath/view/51907.html),
:: and converted to batch code by Ron Bakowski.
::
SET /A P = %1 + 68569
SET /A Q = 4 * %P%/146097
SET /A R = %P% - (146097 * %Q% +3)/4
SET /A S = 4000 * (%R% + 1)/1461001
SET /A T = %R% - 1461 * %S%/4 + 31
SET /A U = 80 * %T%/2447
SET /A V = %U%/11
SET /A GYear = 100 * (%Q% - 49) + %S% + %V%
SET /A GMonth = %U% + 2 - 12 * %V%
SET /A GDay = %T% - 2447 * %U%/80
:: Clean up the mess
FOR %%A IN (P Q R S T U V) DO SET %%A=
:: Add leading zeroes
IF 1%GMonth% LSS 20 SET GMonth=0%GMonth%
IF 1%GDay% LSS 20 SET GDay=0%GDay%
:: Return value
:: Here you can define the form that you want
SET GDate=%GYear%%GMonth%%GDay%
GOTO:EOF
9
如果你只限于只是cmd.exe
,那么其他的解决方案,尽管它们的大小,可能是一样好,你会得到。然而,现代Windows(例如Win7)带有不少其他工具,这些工具可以更轻松地完成工作。
只需创建一个VBScript yester.vbs
脚本如下:
d = date() - 1
wscript.echo year(d) * 10000 + month(d) * 100 + day(d)
然后你可以从你的cmd
脚本中调用它:
for /f %%a in ('cscript //nologo yester.vbs') do set yesterday=%%a
和yesterday
变量的形式yyyymmdd
的创建不管你的愿望如何操纵。
1
下面是一个解决方案,用于即时创建earlierday.vbs文件,使用它并在之后删除它。
它并将结果存储在变量NewDate
本示例计算1天前,但可以很容易地计算出的日期进一步向后通过改变偏移变量的值。
@echo off
set Offset=1
echo d = date() - WScript.Arguments.Item(0) > earlierday.vbs
echo wscript.echo year(d) * 10000 + month(d) * 100 + day(d) >> earlierday.vbs
for /f %%a in ('cscript //nologo earlierday.vbs %Offset%') do set NewDate=%%a
del earlierday.vbs
echo %NewDate%
pause
通过使用%temp%\ earlierday.vbs在用户的临时文件夹中创建文件,可以稍微优化一下。
致谢paxdiablo因为这是他早期发表的一个简单的调整。
编辑:这里有一个循环,接近我真正需要它做的事情。这将需要14天的日期,并返回该日期。然后它会一直保持7天,直到它在一天前的35天。
@echo off
SETLOCAL EnableDelayedExpansion
set BackDaysFrom=14
Set BackDaysTo=35
Set BackDaysStep=7
echo d = date() - WScript.Arguments.Item(0) > earlierday.vbs
echo wscript.echo year(d) * 10000 + month(d) * 100 + day(d) >> earlierday.vbs
for /L %%i in (%BackDaysFrom%, %BackDaysStep%, %BackDaysTo%) do (
for /f %%a in ('cscript //nologo earlierday.vbs %%i') do set NewDate=%%a
echo !NewDate!
)
del earlierday.vbs
pause
相关问题
- 1. 批处理文件替换日期与昨天日期
- 2. 获取昨天的日期
- 3. 如何获取昨天的日期
- 4. 如何在JavaScript中以unix格式获得昨天的日期?
- 5. SQL-日期 - 问:如何获得昨天的日期在以下formatte
- 6. 批处理文件添加今天的日期,昨天的日期,前一天的日期作为扩展文件名
- 7. 在Clojure获取昨天的日期
- 8. 使用日期如何计算昨天昨天或前一天等日期?
- 9. 批处理文件 - 基于日期前一天的日期创建文件夹
- 10. PHP:日期“昨天”,“今天”
- 11. 批处理文件:仅获取文件时间戳日期和年龄天数
- 12. 批处理文件检查文件得到更新到今天的日期(系统日期)
- 13. 如何为昨天的日期命名CSV文件?
- 14. 如何在qt中获取昨天的日期?
- 15. 如何在C中获取昨天的日期?
- 16. SVN从使用批处理文件获取今天的日志。
- 17. 批处理文件.png和Julian日期
- 18. 按批改日期移动文件的批处理文件
- 19. 使用日期获取昨天的日期
- 20. 在Windows批处理文件中以YYYYMMDD格式获取日期
- 21. 如何在.bat批处理文件中更改日期
- 22. 如何追加日期批处理文件在Windows XP
- 23. 如何在批处理文件中获得dirname()的等效项?
- 24. 获取昨天的日期,如果星期一得到周末范围
- 25. 使用批处理文件创建当天日期的文件夹
- 26. PHP日期格式今天/昨天
- 27. 将在txt文件中修改日期的批处理文件
- 28. PHP:如何检查日期是今天,昨天还是明天
- 29. 如何获得天的日期
- 30. Powershell的获取日期:如何在22:00获取昨天的变量?
http://www.robvanderwoude.com/datetimentmath.php – craig65535 2012-08-09 20:27:20
谷歌搜索'DOS当第二个链接昨天date':http://www.binbert.com/blog/2010/07/previous-yesterdays- date-in-dos-batch-file/ – SeanC 2012-08-09 20:28:11
当谷歌搜索日期扣除批处理文件时的第一个链接:http://stackoverflow.com/questions/355425/date-arithmetic-in-dos-scripting – Andrew 2012-08-09 21:04:50