2017-09-05 246 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