Variable du jour précédent dans un fichier batch

Je dois écrire un fichier de commandes qui appelle une commande et passe un paramètre de date pour le jour précédent.

Exemple:

[fonction] AAAAMMJJ

Je ne peux pas sembler en trouver un exemple. Et mon entreprise n’aime pas que nous utilisions des logiciels gratuits, donc j’ai vraiment besoin que la solution soit une solution purement DOS.

Vous pouvez commencer avec Dostips: Date et heure
Il existe des fonctions pour évaluer une date à un nombre de jours de série et vice versa.
Donc, les résultats sont à

 call :jdate "%date%" JD_result set /a prev_day=JD_result-1 call :jdate2date %prev_day% YYYY MM DD echo Previous day is %DD%.%MM%.%YYYY% 

Je ne trouve pas la solution originale que j’avais pour cela, mais j’ai trouvé quelque chose sur le site de Rob Van Der Woude qui fera le travail correctement.

Il y a un bogue dans le fichier posté ici, du fait que SET /A traitera les chaînes qui commencent par un zéro comme octal, ce qui pose des problèmes lorsque les dates jour / mois commencent par un zéro.

Si vous obtenez les fichiers liés ci-dessus, mais modifiez le code de la procédure: JDate (ligne 157) en:

 SET MonthChecker1=%2 SET MonthChecker2=%MonthChecker1:~0,1% IF %MonthChecker2%==0 ( SET MonthChecker3=%MonthChecker1:~1,1% ) ELSE ( SET MonthChecker3=%MonthChecker1% ) SET DayChecker1=%3 SET DayChecker2=%DayChecker1:~0,1% IF %DayChecker2%==0 ( SET DayChecker3=%DayChecker1:~1,1% ) ELSE ( SET DayChecker3=%DayChecker1% ) SET /A Month1 = ( %MonthChecker3% - 14 ) / 12 SET /A Year1 = %1 + 4800 SET /A JDate = 1461 * ( %Year1% + %Month1% ) / 4 + 367 * ( %MonthChecker3% - 2 -12 * %Month1% ) / 12 - ( 3 * ( ( %Year1% + %Month1% + 100 ) / 100 ) ) / 4 + %DayChecker1% - 32075 FOR %%A IN (Month1 Year1) DO SET %%A= GOTO:EOF 

Ceci est testé et fonctionne sur une boîte 2K8R2. Cela vaut certainement la peine d’utiliser cette solution par rapport aux autres solutions existantes, car elle permet de déterminer le format de date sur le système hôte à partir du registre, ce qu’aucune autre solution n’a trouvée.