2017-09-05 194 views
0

我正在尝试获取StartDate(Today)和EndDate(Yesterday)。我一直在努力保持数字格式正确的一天。然而,我注意到,系统不喜欢什么时候有一个前导零,当它从“09”减去1时失败,但与“10”完美匹配。我怎样才能解决这个问题?获取当前日期和前一天

echo off 

REM CurrentDate (END DATE)  ------------------------------------------------------------- 
Set dd=%date:~4,2% 
Set mm=%date:~7,2% 
Set yyyy=%date:~10,4% 
set END_DATE=%yyyy%-%mm%-%dd% 00:00 AM 

echo %END_DATE% 

REM CurrentDate - 1 (START DATE) ------------------------------------------------------------ 
set m1dd=%date:~4,2% 
set m1dd=09 
echo %m1dd% 
set /A m1dd -= 1 
echo %m1dd% 
Set m1dd=0%m1dd% 
echo %m1dd% 
Set m1dd=%m1dd:~-2% 
echo %m1dd% 
set START_DATE=%yyyy%-%mm%-%m1dd% 00:00 AM 

echo %START_DATE% 

pause 
+1

说明了反对票,请让我可以学习和创造美好未来的问题吗?谢谢。 – Amasian21

+1

在开始之前如何结束? – Compo

+0

主要你应该在发帖之前研究你的主题,在上面的搜索框中键入'batch yesterday',你会得到很多结果。 – LotPings

回答

1

此批处理文件使用一个小窍门,用XCOPY命令来验证日期实际上是一个有效的日期,因为您从YYYYMMDD中减去1。

@echo off 
setlocal 
set rand=%random% 
md "dummy%rand%\empty%rand%" 

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" 

set /a y=%dt:~0,4% 
set /a m=1%dt:~4,2% 
set /a d=1%dt:~6,2% 

REM set the number of days to substract 
SET DAYS=1 
FOR /L %%G IN (1,1,%days%) DO CALL :loop 

set subdate=%y%%m:~-2%%d:~-2% 
echo Today is: %dt:~0,8% 
echo Yesterday was: %subdate% 

rd /s /q "dummy%rand%" 
pause 
endlocal 
GOTO :EOF 

:loop 
    set /a d-=1 

    if %d% lss 101 (
    set d=131 
    set /a m-=1 

    if %m% lss 101 (
     set m=112 
     set /a y-=1 
    ) 
) 

xcopy /d:%m:~-2%-%d:~-2%-%y% /t "dummy%rand%\empty%rand%" "dummy%rand%" >nul 2>&1 || goto loop 

GOTO :EOF 

输出

Today is: 20170905 
Yesterday was: 20170904 
Press any key to continue . . . 
-3

我想你应该修改系统日期/时间格式为yyyy/MM/DD

Refer this post

0

你做日期计算的方式是不理想的。为了更好的日期计算,你可以参考这个link

如果你只是寻找一个快速的修复,使当前的代码运行,只需删除前导零如下:

echo off 

REM CurrentDate (END DATE)  ------------------------------------------------------------- 
Set dd=%date:~4,2% 
Set mm=%date:~7,2% 
Set yyyy=%date:~10,4% 
set END_DATE=%yyyy%-%mm%-%dd% 00:00 AM 

echo %END_DATE% 

REM CurrentDate - 1 (START DATE) ------------------------------------------------------------ 
set m1dd=%date:~4,2% 
set m1dd=09 
set /a m1dd=100%m1dd% %% 100 
echo %m1dd% 
set /a m1dd -= 1 
echo %m1dd% 
Set m1d=0%m1dd% 
echo %m1dd% 
Set m1d=%m1dd:~-2% 
echo %m1dd% 
set START_DATE=%yyyy%-%mm%-%m1dd% 00:00 AM 

echo %START_DATE% 

pause 
1

你可以利用来自您的批处理文件的PowerShell:

@Echo Off 
Set "TS=.ToString('yyy-MM-dd') + \" 00:00 AM\"" 
For /F "UseBackTokens=1*[email protected]" %%A In (` 
    PowerShell "(Get-Date)%TS% + \"@\" + (Get-Date).AddDays(-1)%TS%"` 
) Do Set "TD=%%A" & Set "YD=%%B" 
Echo %%TD%% = %TD% 
Echo %%YD%% = %YD% 
Timeout -1 
+0

是用于混淆或缩短的'%TS%' - 好像它同时适用于;-) +1 – LotPings

相关问题