문제

나는 단지 알아 내고 싶다.

배치 파일 (CMD)은 어떻게 날짜에서 남은 날을 어떻게 말해 줄 수 있습니까 ... ???

와 같은:

set setdate=24/07/2009
echo The date is now: %date%
echo Your set date is: %setdate%
echo You're %days% days left from %setdate%

감사!

도움이 되었습니까?

해결책

VBScript의 간단한 솔루션은 다음과 같습니다.

Dim dt:    dt    = DateValue(WScript.Arguments.Unnamed(0))
Dim dtNow: dtNow = Now
Dim diff:  diff  = DateDiff("d", dtNow, dt)

WScript.Echo "The date is now:  " & FormatDateTime(dtNow, vbShortDate)
WScript.Echo "Your set date is: " & FormatDateTime(dt, vbShortDate)
WScript.Echo "You're " & diff & " days left from " & FormatDateTime(dt, vbShortDate)

배치 파일 에서이 스크립트를 호출하고 다음과 같은 대상 날짜를 지정할 수 있습니다.

cscript filename.vbs 12/25/2009 //nologo

다른 팁

... 좋아, Asker는 내가 그를 위해 모든 일을하기를 원하기 때문에 여기에 대본이 있습니다.

@echo off & setlocal
set now=%date%
set then=2010-08-01

:: split into year, month, day
set nY=%now:~0,4%&set nM=%now:~5,2%&set nD=%now:~8,2%
set tY=%then:~0,4%&set tM=%then:~5,2%&set tD=%then:~8,2%

:: remove leading zero
if "%nM:~,1%"=="0" set nM=%nM:~1%
if "%tM:~,1%"=="0" set tM=%tM:~1%
if "%nD:~,1%"=="0" set nD=%nD:~1%
if "%tD:~,1%"=="0" set tD=%tD:~1%

set mdays=31 28 31 30 31 30 31 31 30 31 30 31
set n=0
set t=0
call :days n %nM% %mdays%
call :days t %tM% %mdays%

set /a d=(t+tD)-(n+nD) + ((tY-nY) * 365)

goto :skip
:days
set var=%1
set M=%2
set i=0
shift & shift
:days_loop
set /a i=i+1    
if %i% geq %M% goto :EOF
set /a %var%=%var%+%1
shift & goto :days_loop
:skip

echo The difference between %now% and %then% is %d% days.

비교를 위해, 파이썬에서도 같은 것 :

import datetime
now = datetime.datetime.now()
then = datetime.datetime(
    # Do NOT use leading zeros here.
    year = 2010,
    month = 8,
    day = 1,
)
diff = then - now

그것 ~할 것 같다 간단한 수학 기능으로이를 달성 할 수 있습니다. cmd.exe, 그러나 기계의 지역 설정에 따라 달라집니다 (DD/MM/YYYY의 날짜 형식을 사용하는 경우 YYYY-MM-DD에서 중단됩니다). 많은 코드가 필요합니다.

Perl, PHP 또는 Python과 같은 스크립팅 언어 만 사용하는 것이 훨씬 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top