Je voudrais définir la date dans un fichier de lots de Windows à 7 jours à partir d'aujourd'hui. Je voudrais le faire dans le format suivant.
set today=%date:~10,4%-%date:~4,2%-%date:~-7,2%
6 Réponses :
J'ai posté la description ci-dessous sur certains sites il y a quelque temps:
Les fichiers de lots suivants convertissent de la date à la date de jour Julian Un vicefersa: p>
DateTojulian.bat: P> juliantodate.bat: p> de cette façon, pour ajouter / soustraire un nombre de jours à une date Utilisez les lignes suivantes: CALL DATETOJULIAN %DATE%
SET /A NEWDATE=JDN+DAYS
CALL JULIANTODATE %NEWDATE%
Adametrada a demandé à propos des dates de soustraire. J'ai eu un temps difficile soustrayant deux dates de Julian à cause de la setlocal dans les fonctions Julian. Je l'ai fait en appelant une fonction. p>
Appel: Sub_Julien! Julian! % Aujourd'hui_julian% p>
: Sub_Julians p>
set / a delta_dates =% ~ 1-% ~ 2 p>
... p>
GOTO: EOF :: FIN: AGE_OF_EPSDATE P>
OK, j'avais besoin d'un fichier de commandes pour afficher le Jday actuel pour un centre d'opérations DOD. Vous pouvez double-cliquer sur le fichier et il s'affichera dans une fenêtre CMD. Ensuite, appuyez sur n'importe quelle touche pour quitter.
Voici ce que j'ai proposé: P>
@echo off for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a" set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%" set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" :: Call the day ordinal number subroutine call :JDdayNumber %DD% %MM% %YYYY% DayOrdinalNumber :: Display the result echo. echo Today is JDay %DayOrdinalNumber% echo. pause, endlocal & goto :EOF :: set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%" :: set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%" :: echo datestamp: "%datestamp%" :: echo timestamp: "%timestamp%" :: echo fullstamp: "%fullstamp%" :: ============================================================ :: Subroutine: Calculate a day's ordinal number within the year ::JDdayNumber day month year return_ setlocal enableextensions enabledelayedexpansion if %2 LEQ 2 ( set /a f=%1-1+31*^(%2-1^) ) else ( set /a a=%3 set /a b=!a!/4-!a!/100+!a!/400 set /a c=^(!a!-1^)/4-^(!a!-1^)/100+^(!a!-1^)/400 set /a s=!b!-!c! set /a f=%1+^(153*^(%2-3^)+2^)/5+58+!s! ) set /a return_=%f%+1 endlocal & set "%4=%return_%" & goto :EOF
J'ai refactore le code du Jdate code> et
gdate code> des sous-routines un peu de http://www.robvanderwoude.com/datetimentmath.php .
Utilisation Exemple: H1>
@echo off
call :main %*
goto :eof
:main
setlocal
call :initialize "2017-01-01" "1"
endlocal
goto :eof
:initialize
setlocal
set "previousDate=%~1"
set /a "numberOfDays=%~2"
set /p "previousDate=Enter ISO date: "
set /p "numberOfDays=Enter number of days to add: "
set "currentDate="
call :addIsoDateDays "%previousDate%" "%numberOfDays%" currentDate
echo %previousDate% + %numberOfDays% days = %currentDate%
echo.
call :initialize "%currentDate%" "%numberOfDays%"
endlocal
goto :eof
:stripLeadingZero
setlocal
set "number=%~1"
if %number:~0,1% equ 0 (
set "number=%number:~1%"
)
(
endlocal
set "%~2=%number%"
)
goto :eof
:addLeadingZero
setlocal
set "number=%~1"
if %number% lss 10 (
set "number=0%number%"
)
(
endlocal
set "%~2=%number%"
)
goto :eof
:gregorianToJulianDate
setlocal
set "gregorianYear=%~1"
set "gregorianMonth=%~2"
set "gregorianDay=%~3"
call :stripLeadingZero "%gregorianMonth%" gregorianMonth
call :stripLeadingZero "%gregorianDay%" gregorianDay
set /a "julianYear=(%gregorianYear% + 4800)"
set /a "julianMonth=((%gregorianMonth% - 14) / 12)"
set /a "julianDate=((1461 * (%julianYear% + %julianMonth%) / 4) + (367 * (%gregorianMonth% - 2 - (12 * %julianMonth%)) / 12) - ((3 * ((%julianYear% + %julianMonth% + 100) / 100)) / 4) + (%gregorianDay% - 32075))"
(
endlocal
set "%~4=%julianDate%"
)
goto :eof
:isoToJulianDate
setlocal
set "date=%~1"
set "year="
set "month="
set "day="
for /f "tokens=1-3 delims=-" %%a in ("%date%") do (
set "year=%%a"
set "month=%%b"
set "day=%%c"
)
set /a "julianDate=0"
call :gregorianToJulianDate "%year%" "%month%" "%day%" julianDate
(
endlocal
set "%~2=%julianDate%"
)
goto :eof
:julianToGregorianDate
setlocal
set /a "julianDate=%~1"
set /a "p=(%julianDate% + 68569)"
set /a "q=(4 * %p% / 146097)"
set /a "r=(%p% - ((146097 * %q%) + 3) / 4)"
set /a "s=(4000 * (%r% + 1) / 1461001)"
set /a "t=(%r% - ((1461 * %s%) / 4) + 31)"
set /a "u=(80 * %t% / 2447)"
set /a "v=(%u% / 11)"
set /a "gregorianYear=((100 * (%q% - 49)) + %s% + %v%)"
set /a "gregorianMonth=(%u% + 2 - (12 * %v%))"
set /a "gregorianDay=(%t% - (2447 * %u% / 80))"
call :addLeadingZero "%gregorianMonth%" gregorianMonth
call :addLeadingZero "%gregorianDay%" gregorianDay
(
endlocal
set "%~2=%gregorianYear%"
set "%~3=%gregorianMonth%"
set "%~4=%gregorianDay%"
)
goto :eof
:julianToIsoDate
setlocal
set /a "julianDate=%~1"
set "year="
set "month="
set "day="
call :julianToGregorianDate "%julianDate%" year month day
set "isoDate=%year%-%month%-%day%"
(
endlocal
set "%~2=%isoDate%"
)
goto :eof
:addIsoDateDays
setlocal
set "previousIsoDate=%~1"
set /a "numberOfDays=%~2"
set /a "previousJulianDate=0"
call :isoToJulianDate "%previousIsoDate%" previousJulianDate
set /a "currentJulianDate=(%previousJulianDate% + %numberOfDays%)"
set "currentIsoDate="
call :julianToIsoDate "%currentJulianDate%" currentIsoDate
(
endlocal
set "%~3=%currentIsoDate%"
)
goto :eof
Une option plus simple consiste à appeler une commande PowerShell à partir de votre script de lot pour manipuler la date. Le script de lot peut définir la date à 7 jours dans le passé avec une seule ligne.
set /p Today=<captureVar
Il y a une réponse avec Calling PowerShell. Bien qu'il y ait des machines toujours en cours d'exécution sans PowerShell installé (au moment de la rédaction de ce XP, Vista, Windows7, Windows2003 et Windows2008 ont toujours une action d'OS de descente et arrivent sans PowerShell installé)
Autre option utilisera Jscript dans une batte Script p>
voici le dayadder.bat code> qui accepte un seul argument - les jours que vous souhaitez ajouter à la date actuelle et imprime le résultat: P>
E:\scripts>call dayAdder.bat 7
Sun Nov 8 16:27:48 UTC+0200 2020
Year: 2020
Month: 10
DayOfTeWEek: 2
DayOfTheMonth: 3
+1 pour essayer de faire quelque chose avec le lot. Votre masochiste.
Utilisez-vous vraiment DOS? Ou utilisez-vous un fichier de commandes dans Windows?
I Googled Dos Dos Ajouter des dates, et le premier lien m'a envoyé ici: Robvanderwoude.com/dateTimentMath.php a> - Ce n'est pas une chose amusante à faire, mais c'est possible
J'utilise un fichier de commandes dans Windows ... Désolé, à travers c'était DOS
Il n'y a pas de mathématiques de date / heure dans les scripts par lots, mais en fonction de ce que vous essayez de faire, il pourrait y avoir une façon différente de faire la même chose. Où avez-vous besoin d'appliquer exactement le résultat de ce calcul?
Dupliqué possible de Date Arithmétique dans CMD Scripting