我正在使用date命令来处理批处理脚本 我想知道如何使用命令日期来获取昨天的日期。
答案 0 :(得分:9)
日期变量的主要危险是区域设置敏感度。如果您有PowerShell可用(这些日子甚至在大公司中更常见),那么您可以使用PowerShell进行格式化并将其包装在批处理FOR语句中。
以下PowerShell系列将为您计算数据并为您设置日期格式: -
PowerShell $date = Get-Date; $date=$date.AddDays(-1); $date.ToString('yyyy-MM-dd')
然后您可以通过FOR执行此操作以将其转换为批处理文件变量(记住使用hat ^符号转义一大堆字符,并使用反引号来避免嵌入引号): -
for /f "usebackq" %%i in (`PowerShell $date ^= Get-Date^; $date ^= $date.AddDays^(-1^)^; $date.ToString^('yyyy-MM-dd'^)`) do set YESTERDAY=%%i echo %YESTERDAY%
我确信具有出色PowerShell和Batch编程技能的人可以减少PowerShell命令和/或转义字符的数量,使其更具可读性/可维护性。
答案 1 :(得分:4)
任何时候你听到批次,想想Rob Van der Woude。无论如何,这是yesterday.bat。
答案 2 :(得分:4)
关注@ JRL的answer ...如果真的那么难,也许可以使用PowerShell然后做类似于Powershell's Get-date: How to get Yesterday at 22:00 in a variable?
您可以在bat文件中调用PowerShell,如下所示:Use bat to start Powershell script
你最终会得到一个三或四个班轮解决方案,而不是Rob Van der Woude所写的100个左右(完全无法添加)。
祝你好运......答案 3 :(得分:3)
这样做的成本要低得多,只能批量生产。我知道它粗糙,但它对我有用。
基本上将昨天的日期写入yesterday.txt
这样的文本文件中。然后在下次进程运行时调用它。适用于我每天只运行一次的流程。
::pick up yesterdays date from file
::Needs to be done as the file generated today is *yesterdays* report.
for /F "tokens=1" %%a IN (D:\BIN\Yesterday.txt) DO set yest=%%a
::Write todays date to file for use tomorrow
echo %date% >D:\BIN\Yesterday.txt
然后您可以使用%yest%
将昨日日期称为变量。
答案 4 :(得分:2)
我发现这个脚本运行良好
@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%
结果如下:
IIS Date: 130904
AWS Date: 2013-09-04
脚本取自http://www.powercram.com/2010/07/get-yesterdays-date-in-ms-dos-batch.html
答案 5 :(得分:1)
1)这是一个名为yesterday.bat
的脚本:
@if (@x)==(@y) @end /***** jscript comment ******
@echo off
cscript //E:JScript //nologo "%~f0"
exit /b 0
@if (@x)==(@y) @end ****** end comment *********/
var d = new Date();
d.setDate(d.getDate() - 1);
var mm=(d.getMonth())+1
if (mm<10){
mm="0"+mm;
}
var dd=d.getDate();
if (dd<10) {
dd="0"+dd;
}
WScript.Echo(d.getFullYear()+""+mm+""+dd);
你可以像
一样使用它for /f %%a in ('yesterday.bat') do set "ystd=%%a"
2)以下是您最有可能安装的powershell的单线程:
powershell "[DateTime]::Today.AddDays(-1).ToString("""yyyyMMdd""")"
您可以将其分配给变量:
for /f %%a in ('powershell "[DateTime]::Today.AddDays(-1).ToString("""yyyyMMdd""")"') do set ystd=%%a
答案 6 :(得分:0)
我完成了昨天的日期如下。
set m=%date:~-7,2%
set /A m -= 1
set DATE_DIR=%date:~-10,2%-%m%-%date:~-4,4%
格式可以在第3行中更改
样本输出:03-13-2013
这是我发现的最简单的方法。
答案 7 :(得分:0)
只需创建批处理文件并添加:
@echo off
set day=-1
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "YYYY=%result:~0,4%"
set "MM=%result:~4,2%"
set "DD=%result:~6,2%"
set "result=%yyyy%-%mm%-%dd%"
REM Below Will echo full date including year, month and yesterday's date.
echo %result%
REM Below line will echo yesterday's date (Day only).
echo %DD%
pause
答案 8 :(得分:-3)
批量获取昨日日期(YYYYMMDD)的最简单方法如下:
set D=%date:~-10,2%
set /A D -= 1
echo %date:~-4,4%%date:~-7,2%%D%