IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

[batch] copier un fichier log de la veille chaque jour.


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Par défaut [batch] copier un fichier log de la veille chaque jour.
    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.

  2. #2
    Membre chevronné

    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2003
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 333
    Billets dans le blog
    1
    Par défaut
    le fichier log de la vieille => Tu peux expliquer en Français ce que cela signifie s'il te plait ?

  3. #3
    Expert confirmé
    Avatar de shawn12
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2006
    Messages
    3 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2006
    Messages : 3 368
    Par défaut
    Qui est la vieille dont tu parles ?

    Sinon, tu peux t'inspirer de cet exemple : http://windows.developpez.com/faq/ba...name_with_date

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Par défaut
    LOL

    désolé je voulais dire veille pour vieille ! (je suis confuse )

    veille = (date du jour) - (1 jour )
    jour précédant la date du jour.

    J'ai avancé entre temps :

    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
    68
    69
    70
    71
    72
    73
    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)
    
    	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
    	
    if %vj% EQU 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
    
    if %vj% LSS 10 goto nivEGzero
    if %vj% GEQ 10 goto nivNOzero
    
    :nivEGzero
    vj=0%vj%
    goto nivNOzero
    
    :nivNOzero
    
    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

  5. #5
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    salut,

    un debut

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Par défaut
    suite à mes dernières modification je me renconte que mon test pour le dernier jour du mois de février le 28 ou le 29 n'est pas bon.

    j'ai donc fait les modifications suivante :

    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    echo on
    
    REM repertoire source
    set cpsource=C:\s1\
    REM repertoire destination
    set cpdest=C:\d1\
    REM racine du nom du fichier source
    set racine=Tracer
    
    REM la date du jour
    set j_date=%date%
    REM variable jour, mois, annee de la date du jour
    set jour=%j_date:~0,2%
    set mois=%j_date:~3,2%
    set annee=%j_date:~6,4%
    
    
    REM pour les valeur de jour egale à 01 ... 09 je retire le 0
    if %jour:~0,1%==0 set /a vj=%jour:~1,1%
    if %jour:~0,1% GTR 0 set /a vj=%jour%
    REM pour les veleur de mois égale à 01 ... 09 je retire le 0
    if %mois:~0,1%==0 set /a vm=%mois:~1,1%
    if %mois:~0,1% GTR 0 set /a vm=%mois%
    
    REM si la date du jour est inférieur à 2  
    REM je décrémente de 1 le mois
    if %vj% LSS 2 set /a vm=%vm%-1
    REM si vm (donc le mois) est inférieur à 1 vm vos 12 et je décrémente de 1 l'annee
    if %vm% LSS 1 ( set /a annee=%annee%-1 
    set /a vm=12)
    	
    	REM par defaut le si la date du jour est le 1er du mois
    	REM je considere que le dernier jour du mois précedant est le 31
    	set dernierj=31
    	
    	REM je modifie le dernier jour du mois precedant 
    	REM pour les mois suivant 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
    	
    	REM je modifie le dernier jour du mois precedant
    	REM pour le cas particulier du mois de fevrier
    	REM je gere les annees bissextiles
    	REM Principe si l'expression r1 - r2 + r3 vaut 1 si et seulement si l'année est bissextile
    	if %vm% EQU 2 (
    		
    		set mod1=%annee%%%400
    		if %mod1% equ 0 (
    			set r1=1
    		) else (
    			set r1=0
    		)
    		
    		set mod2=%annee% % 100
    		if %mod2% equ 0 (
    			set r2=1
    		) else (
    			set r2=0
    		)
    		
    		set mod3=%annee% % 4
    		if %mod3% equ 0 (
    			set r3=1
    		) else (
    			set r3=0
    		)
    		
    		set res_bix = r1-r2+r3
    		
    		if %res_bix% EQU 1 ( 
    			set /a dernierj=29
    		) else ( 
    			set /a dernierj=28
    		)
    		
    	)
    
    REM je dertermine le jour précedant la date du jour dans la variable vj:	
    if %vj% EQU 1 set /a vj=%dernierj%
    if %vj% GTR 0 set /a vj = %vj%-1
    
    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% ret_div %ret_div% dernierj %dernierj%
    echo racine %racine%
    
    REM je rajoute les le 0 pour à jour ou à mois pour le format date
    if %vm% LSS 10 set vm=0%vm%
    if %vj% LSS 10 set vj=0%vj%
    
    REM variable pour le nom du fichier source
    set fich=%racine%%vj%.log
    REM variable pour le nom pour le fichier destination
    set fich2=%racine%%vj%_%vm%_%annee%.log
    echo %fich% %fich2%
    
    REM variable avec le chemin et le nom du fichier source et destination
    set source=%cpsource%%fich%
    set dest=%cpdest%%fich2%
    echo %source%
    echo %dest%
    
    REM copie du fichier log :
    copy %source% %dest%
    
    REM stock la trace de la copie dans un fichier de type log
    echo %date% %time% copie du fichier %source% dans %dest% >> backup_log.log
    
    pause 
    echo on
    avec comme date du jour le 01/03/2004 voici le résultat :

    au moment de tester l année bissextile
    0 etait inattendu
    C:\> if equ 0 (
    Merci de votre aide, de vos remarques, ou de vos pistes pour me faire avancer.

  7. #7
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    En plus de la solution pointée par I'm_HERE, il existe un très vieil algorithme dont tu peux trouver un exemple d'utilisation dans cette autre discussion. Tout cela te simplifiera grandement la vie.

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/07/2009, 11h22
  2. [Batch] Récupérer un fichier .log des actions du .bat
    Par rob81 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 06/11/2007, 09h54
  3. Réponses: 6
    Dernier message: 14/06/2007, 16h36
  4. [batch]supprimer les fichiers créés il y a X jour
    Par norac dans le forum Windows
    Réponses: 6
    Dernier message: 18/10/2006, 15h32
  5. Batch pour copier des fichier
    Par borgfabr dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 09/03/2004, 08h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo