2017-09-05 2 views
0

StartDate (오늘)와 EndDate (어제)를 얻으려고합니다. 나는 하루 동안 숫자의 서식을 올바르게 유지하려고 노력해 왔습니다. 그러나 나는 시스템이 선행 제로가 존재하고 "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을 참조하십시오. 당신이 당신의 현재 코드 실행을 만들 수있는 빠른 수정을 찾고 있다면 다음과 같이

, 단순히 선행 0을 제거 :

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을 활용할 수있다 : I 학습 및 미래의 더 나은 질문을 만들 수 있도록하시기 바랍니다 다운 투표를위한

@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