2009-07-20 17 views
0

Je veux juste comprendre,CMD: Combien de gauche

Comment un fichier de commandes (CMD) me dire combien de jours, je suis parti de toute date ... ???

Tels que:

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% 

Merci!

Répondre

1

Voici une solution simple 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) 

Vous pouvez appeler ce script depuis votre fichier de commandes et préciser la date cible li ke:

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

Merci, je pense que c'est le meilleur et le code le plus économe que j'ai vu jusqu'à maintenant! –

1

Il pourrait être possible d'y parvenir avec la simple fonctionnalité de mathématiques dans cmd.exe, mais il dépend des paramètres régionaux de la machine (si vous utilisez un format de date de JJ/MM/AAAA, il se brisera sur mon YYYY-MM-DD), et il faudrait beaucoup de code.

Il serait probablement beaucoup plus simple d'utiliser un langage de script tel que Perl, PHP ou Python pour cela.

+0

Eh bien, je vais corriger cela, mais pouvez-vous me donner le code pour cela. –

3

... D'accord, puisque le demandeur veut que je fasse tout le travail pour lui, voici le script:

@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. 

À titre de comparaison, la même chose en Python:

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