Bonjour à tous

Je suis entrain de faire un fichier bat pour copier le fichier log de la veille d une application.

Le répertoire source (répertoire log de l'application) contient 31 fichiers sur lesquels l'application repasse pour inscrire les log du jour en boucle j'ai donc uniquement un historique de 31 glissant plus ou moins (mois de de 30, 29 et 28)...
voici comment sont nommés ces fichiers Tracer01.log .... Tracer31.log

je cherche donc juste a copier le ficher de la veille dans un autre répertoire en le renommant comme suit :
TracerJJ_mm_aaaa.log

j'ai commencé mon fichier comment suit je rencontre juste un problème dans mes conditions pour tester le cas du premier jour du mois ou la date de veille et soit le 31 ou 30 ou 28 ou 29.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
echo on
REM copy e:\temp\test\*.* e:\temp\test2\*.*

REM repertoire source
set cpsource=C:\s1\
REM repertoire destination
set cpdest=C:\d1\
set racine=Tracer

REM date du jour
set j_date=%date%
REM variable jour, mois, annee 
set jour=%j_date:~0,2%
set mois=%j_date:~3,2%
set annee=%j_date:~6,4%
set vj = jour
set vm = mois

if %jour:~0,1%==0 set /a vj=%jour:~1,1%
if %mois:~0,1%==0 set /a vm=%mois:~1,1%

if %vj% LSS 2 set /a vm=%vm%-1
if %vm% LSS 2 ( set /a annee=%annee%-1 
set /a vm=12)

rem if %vj% EQU 1 ( set dernierj=31
	REM dernier jour du mois de avril, juin, septembre, novembre
	if %vm% EQU 4 ( set /a dernierj=30)
	if %vm% EQU 6 ( set /a dernierj=30)
	if %vm% EQU 9 ( set /a dernierj=30)
	if %vm% EQU 11 ( set /a dernierj=30)
	set res_bix=1
	REM dernier jour du mois de fevrier
	if %vm% EQU 2 ( set /a res_bix=0
	set /a div_annee = %annee%/4
	set /a ret_div = %div_annee%*4
	set /a res_bix = %annee%-%ret_div%
	set /a dernierj=28 )
	if %res_bix% EQU 0 ( set /a dernierj=29 )
rem ) fin du premier si pour vj est égale à 1

set /a vj=%dernierj%

REM DEBUG
echo j_date %j_date% jour %jour% mois %mois% annee %annee%
echo vj %vj% vm %vm%
echo res_bix %res_bix% div_annee %div_annee% dernierj %dernierj%
echo racine %racine%

pause

set fich=%racine%%vj%.log
set fich2=%racine%%vj%_%vm%_%annee%.log
echo %fich% %fich2%

set source=%cpsource%%fich%
set dest=%cpdest%%fich2%
echo %source%
echo %dest%

REM copie du fichier log :
copy %source% %dest%

pause 

echo on

j'ai mis ces deux lignes en commentaires pour le moment car elle font planté le script.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
rem if %vj% EQU 1 ( set dernierj=31
rem ) fin du premier si pour vj est égale à 1
sinon sans ces deux ligne j ai plus ou moins le résultat voulu. je suis surement pas loin du but.
le script n est peut être pas des plus académique désolé je suis pas un spécialiste du batch.
Merci de votre aide et du coup de pousse.