10
votes

Comment obtenir la date d'hier dans un fichier de commandes

Je sais comment obtenir la date d'aujourd'hui dans Windows 7. Voici la commande que j'utilise:

%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%


5 commentaires

Robvanderwoude.com/dateTimentMath.php


1er lien lorsque le fichier de parquet de soustraction Date de googling: Stackoverflow.com/ Questions / 355425 / ...


Puisqu'il s'agit de W7, pourquoi ne pas utiliser des outils disponibles: PowerShell Get-Date ((Date d'obtention) .Adddays (-1)) -Uformat "% Y% M% D"


@wmz comme pour moi (Win 8.1) Meilleure utilisation PowerShell Get-Date ((Get-Date) .Addays (-1)) -Uformat '% Y-% M-% D' - Format de date paramètres dans une citation unique.


Dupliqué possible de Comment obtenir Date de 3 jours après la date actuelle à l'aide du fichier de commandes


4 Réponses :


8
votes

a trouvé un script qui fonctionnera pour vous assurer d'obtenir la veille même si l'année ou le mois change DOS hier Batch .

@echo off

set yyyy=

set $tok=1-3
for /f "tokens=1 delims=.:/-, " %%u in ('date /t') do set $d1=%%u
if "%$d1:~0,1%" GTR "9" set $tok=2-4
for /f "tokens=%$tok% delims=.:/-, " %%u in ('date /t') do (
for /f "skip=1 tokens=2-4 delims=/-,()." %%x in ('echo.^|date') do (
set %%x=%%u
set %%y=%%v
set %%z=%%w
set $d1=
set $tok=))

if "%yyyy%"=="" set yyyy=%yy%
if /I %yyyy% LSS 100 set /A yyyy=2000 + 1%yyyy% - 100

set CurDate=%mm%/%dd%/%yyyy%
set dayCnt=%1

if "%dayCnt%"=="" set dayCnt=1

REM Substract your days here
set /A dd=1%dd% - 100 - %dayCnt%
set /A mm=1%mm% - 100

:CHKDAY
if /I %dd% GTR 0 goto DONE
set /A mm=%mm% - 1
if /I %mm% GTR 0 goto ADJUSTDAY
set /A mm=12
set /A yyyy=%yyyy% - 1

:ADJUSTDAY
if %mm%==1 goto SET31
if %mm%==2 goto LEAPCHK
if %mm%==3 goto SET31
if %mm%==4 goto SET30
if %mm%==5 goto SET31
if %mm%==6 goto SET30
if %mm%==7 goto SET31
if %mm%==8 goto SET31
if %mm%==9 goto SET30
if %mm%==10 goto SET31
if %mm%==11 goto SET30
REM ** Month 12 falls through

:SET31
set /A dd=31 + %dd%
goto CHKDAY

:SET30
set /A dd=30 + %dd%
goto CHKDAY

:LEAPCHK
set /A tt=%yyyy% %% 4
if not %tt%==0 goto SET28
set /A tt=%yyyy% %% 100
if not %tt%==0 goto SET29
set /A tt=%yyyy% %% 400
if %tt%==0 goto SET29

:SET28
set /A dd=28 + %dd%
goto CHKDAY

:SET29
set /A dd=29 + %dd%
goto CHKDAY

:DONE
if /I %mm% LSS 10 set mm=0%mm%
if /I %dd% LSS 10 set dd=0%dd%

REM Set IIS and AWS date variables
set IISDT=%yyyy:~2,2%%mm%%dd%
set AWSDT=%yyyy%-%mm%-%dd%


0 commentaires

3
votes
@echo off
:: Strip the day of the week from the current date
FOR %%A IN (%Date%) DO SET Today=%%A
:: Parse the date, prefix day and month with an extra leading zero
FOR /F "tokens=1-3 delims=/" %%A IN ("%Today%") DO (
    SET Day=0%%A
    SET Month=0%%B
    SET Year=%%C
)
:: Remove excess leading zeroes
SET Day=%Day:~-2%
SET Month=%Month:~-2%
:: Display the results
SET Day
SET Month
SET Year
:: Convert to Julian date
CALL :JDate %Year% %Month% %Day%
:: Display the result
SET JDate
:: Subtract 1 day
SET /A JPast = JDate - 1
:: Display the result
SET JPast
:: Convert back to "normal" date again
CALL :GDate %JPast%
:: Display the result
::SET GDate=20130121
SET GDate

echo The previous day in form YYYYMMDD is %GDate%

pause
::::::::::::::::::::::::::::::::::::::::::::::::::::::

GOTO:EOF

:JDate
:: Convert date to Julian
:: Arguments : YYYY MM DD
:: Returns   : Julian date
::
:: First strip leading zeroes
SET MM=%2
SET DD=%3
IF %MM:~0,1% EQU 0 SET MM=%MM:~1%
IF %DD:~0,1% EQU 0 SET DD=%DD:~1%
::
:: Algorithm based on Fliegel-Van Flandern
:: algorithm from the Astronomical Almanac,
:: provided by Doctor Fenton on the Math Forum
:: (http://mathforum.org/library/drmath/view/51907.html),
:: and converted to batch code by Ron Bakowski.
SET /A Month1 = ( %MM% - 14 ) / 12
SET /A Year1  = %1 + 4800
SET /A JDate  = 1461 * ( %Year1% + %Month1% ) / 4 + 367 * ( %MM% - 2 -12 * %      Month1% ) / 12 - ( 3 * ( ( %Year1% + %Month1% + 100 ) / 100 ) ) / 4 + %DD% - 32075

SET Month1=
SET Year1=
GOTO:EOF
:GDate
:: Convert Julian date back to "normal" Gregorian date
:: Argument : Julian date  
:: Returns  : YYYY MM DD
:: 
:: Algorithm based on Fliegel-Van Flandern
:: algorithm from the Astronomical Almanac,
:: provided by Doctor Fenton on the Math Forum
:: (http://mathforum.org/library/drmath/view/51907.html),
:: and converted to batch code by Ron Bakowski.
::
SET /A P      = %1 + 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 GYear  = 100 * ( %Q% - 49 ) + %S% + %V%
SET /A GMonth = %U% + 2 - 12 * %V%
SET /A GDay   = %T% - 2447 * %U% / 80
:: Clean up the mess
FOR %%A IN (P Q R S T U V) DO SET %%A=
:: Add leading zeroes
IF 1%GMonth% LSS 20 SET GMonth=0%GMonth%
IF 1%GDay%   LSS 20 SET GDay=0%GDay%
:: Return value
:: Here you can define the form that you want
SET GDate=%GYear%%GMonth%%GDay%
GOTO:EOF

0 commentaires

13
votes

Si vous êtes limité à juste cmd.exe , puis les autres solutions, malgré leur taille, sont probablement aussi bonnes que vous obtiendrez. Cependant, les fenêtres modernes (telles que votre Win7) expédient avec un autre d'autres outils qui peuvent faire le travail beaucoup plus facile.

Créer un VBScript yester.vbs script Comme suit: xxx

alors vous pouvez l'appeler à partir de votre script cmd avec: xxx

et la variable hier sera créée dans le formulaire yyyymmdd pour que vous manipulez toutefois que vous désirez.


4 commentaires

Commentaire 1: Assurez-vous que C: \ Windows \ System32 est dans votre chemin, sinon il lancera une erreur: 'cscript' n'est pas reconnu comme une commande interne ou externe. Ceci peut être résolu en remplaçant cscript par "% systemroot% \ system32 \ cscript.exe" dans le pour ..... . Voir cette Stackoverflow.com/questions / 13976872 / ...


Commentaire 2: Si vous souhaitez exécuter pour / f %% A in ('cscript // nologo yester.vbs') définissez hier = %% A directement dans le cmd terminal, vous devez remplacer le %% par % , sinon vous obtiendrez le message d'erreur suivant: %% A était inattendu A ce moment . Voir ce Stackoverflow.com/Questtions/9311562/ ...


Jeje, je crois que le système32 est dans le chemin par défaut. Si quelqu'un l'a supprimé, c'est sur eux de résoudre le problème - je suppose que quelqu'un enlève activement, cela saura les conséquences. Sur le double pourcentage de commentaires, vous soulevez un bon point, mais la question indiquée explicitement «dans un fichier de commandes».


Oui sûr, désolé, les commentaires ne visent pas vraiment votre réponse (que je +1 BTW) mais sont là pour aider les personnes qui ont rencontré des problèmes comme moi tout en le mettant en œuvre;)



1
votes

Voici une solution qui crée le fichier précédent.vbs à la volée, l'utilise et le supprime ensuite.

Il stocke le résultat dans la nouvelle variable P>

Cet exemple calcule il y a 1 jour, mais Peut facilement calculer une date plus loin en modifiant la valeur de la variable de décalage. p>

@echo off
SETLOCAL EnableDelayedExpansion

set BackDaysFrom=14
Set BackDaysTo=35
Set BackDaysStep=7

echo d = date() - WScript.Arguments.Item(0) > earlierday.vbs
echo wscript.echo year(d) * 10000 + month(d) * 100 + day(d) >> earlierday.vbs

for /L %%i in (%BackDaysFrom%, %BackDaysStep%, %BackDaysTo%) do (
    for /f %%a in ('cscript //nologo earlierday.vbs %%i') do set NewDate=%%a
    echo !NewDate!
)

del earlierday.vbs    

pause


0 commentaires