Programmation de Batch

Résolu
Bonjour,
Je fait une sauvegarde de mes fichiers par tache planifié en exécutant un Batch que j'ai créer. J'utilise Robocopy pour copier mes fichiers et générer un rapport que je reçois par mail chaque jour, et j'utilise Blat pour l'envoie par mail.
Voici le batch :

del /F C:\Bat\RapportServeur1.txt
robocopy E:\ "\\serveur2\d$" /MIR /R:0 /log:RapportServeur1.txt
blat RapportServeur1.txt -to nom@mail.com

La 1ere ligne supprime le rapport précèdent, la 2eme copie les fichiers et génère le rapport et la 3eme envoie le rapport par mail. Mon problème est qu'il y a un grand nombre de fichiers traité par robocopy et que le rapport fait 2Mo, ce qui est plutôt lourd pour un mail. Je n'ai pas besoin du rapport complet, seulement des 10 dernières ligne qui donne le nombre de fichier copier et le nombre d'échoué. Sauriez vous comment je pourrais extraire la fin de mon RapportServeur1.txt et le copier dans un autre .txt?

Merci.
Configuration: Windows Vista
Firefox 3.0.10
Thunderbird 2.0.0.21
Avast home 4.8
Windows live messenger 2009
Messenger Plus! Live 4.81.0.358

24 réponses

  1. Contributeur
    for /f %%a in ('find /v /c "" ^< %fichier%') do set /a lignes=%%a

    find /v /c "" ^< %fichier% compte les lignes dans le fichier, ^ sert à protéger < sinon DOS hurle
    do set /a lignes=%%a et on met le nombre de ligne dans la variable lignes
    1. ha oui sa marche! j'avais essayé de faire :
      more /e +%l2% %fichier%
      %fichier% > nouveau.txt
      mais sa ne me copiais rien.
      maintenant c'est parfait. Merci!
      1. j'essaye de comprendre un peu mieux ce que je fait, mais j'ai vraiment du mal a trouvé une explication claire de la ligne : for /f %%a in ('find /v /c "" ^< %fichier%') do set /a lignes=%%a
        malgré mes recherches avec le help. le ^ me semble bizarre...
        1. Contributeur
          si tu fais
          more /e +%l2% %fichier% > nouveau.txt
          nouveau.txt contient les 10 lignes?
          1. bon, je vais allé mangé en attendant que ccm regle leur probléme de forum. j'ai essayé d'ajouter

            @echo off

            set fichier=RapportServeur1.txt
            set nombre=10
            for /f %%a in ('find /v /c "" ^< %fichier%') do set /a lignes=%%a
            setlocal enableDelayedExpansion
            set /a l2=!lignes! -%nombre%
            more /e +%l2% %fichier%

            mais mon txt ne change toujour pas.
            1. c'est bon, sa a l'air d'etre revenu... allez, c'est reparti, je ressaye.
              1. cela ne marche pas, même en changeant "tokens=*" par "delims=". Mon .txt ne bouge pas.
                1. Contributeur
                  on peut faire plus simple avec la commande more

                  @echo off
                  
                  set fichier=RapportServeur1.txt 
                  set nombre=10
                  for /f %%a in ('find /v /c "" ^< %fichier%') do set /a lignes=%%a
                  setlocal enableDelayedExpansion
                  set /a l2=!lignes! -%nombre%
                  more /e  +%l2% %fichier%
                  
                  1. Contributeur
                    il y a plus simple avec la commande more

                    @echo off
                    
                    set fichier=RapportServeur1.txt 
                    set nombre=10
                    for /f %%a in ('find /v /c "" ^< %fichier%') do set /a lignes=%%a
                    setlocal enableDelayedExpansion
                    set /a l2=!lignes! -%nombre%
                    more /e  +%l2% %fichier%
                    
                    1. Non, cela ne fonctionne pas, même en remplaçant "tokens=*" par "delims=", cela ne change pas mon rapport.
                      1. Non, cela ne fonctionne pas, même en remplaçant "tokens=*" par "delims="
                        1. Non, cela ne fonctionne pas, même en remplaçant "tokens=*" par "delims="
                          1. Non, cela ne fonctionne pas, même en remplaçant "tokens=*" par "delims="
                            1. Non, cela ne fonctionne pas, même en remplaçant "tokens=*" par "delims="
                              1. Non, cela ne fonctionne pas, même en remplaçant "tokens=*" par "delims="
                                • 1
                                • 2