Batch: fichiers par date de modif

Résolu
Bonjour,

Je souhaite faire un batch pour envoyer un mail avec piece jointe (fichier log du jour) en utilisant sendmail.exe

Seulement le fichier log qui doit etre mis en pièce jointe se trouve dans un répertoire avec les fichier log des autre journée.

exemple de liste de fichier log dans mon repertoire:
20100719.log avec date de dernière modification 20/10/2010
20100720.log avec date de dernière modification 21/10/2010
20100721.log avec date de dernière modification 21/10/2010

Ce que je voudrais:
Si le jour de l'exécution du batch on est le 21/07/2010, la ou les pièces jointes devront être tous les fichiers ayant date de dernière modification 21/10/2010 (donc 2fichier dans mon exemple)

Est-ce possible en batch?

8 réponses

  1. bonjour,
    Reformulation:
    J'ai un répertoire où il y a des fichiers qui sont crées vers 3h00 du mat (création d'environ 1~3 fichiers par jour).
    On garde les fichiers de plusieurs mois en archivage dans ce répertoire.

    Et chaque jour à 4h je veut envoyer un mail contenant tout les fichiers qui ont été créé le matin même vers 3h.

    Donc je veut pouvoir mettre en pièce jointe uniquement les fichiers qui ont été crée à la date de lancement du .bat (peu importe le nom des fichiers).

    Si je savait par exemple comment copier d'un répertoire vers un autre uniquement les fichiers qui on leur date de création ou de modification=date du jour de lancement du .bat (%date%), ça m'aiderai déjà je pense.
    1. Contributeur
      hello
      pourquoi pas aussi le3 ème ?
      si la date est 21/07/2010, tu veux le fichier du jour précédent 20100720.log?
      1. Bonjour,

        je vais te donner une piste (Bien sur vais pas te le faire :p

        Liste les fichier log avec la date de modification (21/10/2010)

        dir /TA *.log | find "21/10/2010"

        Copy les fichiers avec la date de modification (21/10/2010)

        Xcopy "Dossier Source/*.log" "Dossier Destination/*.log" /d:10-21-2010 /y

        Cdlt.
        1. Contributeur
          quelque chose comme ça ?
          C:> echo %date%
          22/07/2010
          
          C:> echo %date:~6,4%%date:~3,2%%date:~0,2%.log
          20100722.log
          
          C:>
          1. dir /TA *.log | find "21/10/2010"
            rien ne s'affiche à l'ecran

            Pour l'instant voilà ou j'en suis avec mon batch:

            set source="c:\a\"
            set dest="c:\b\"
            for /f "tokens=1-3 delims=/ " %%a in ('date/t') do set MMDDYY=%%b-%%a-%%c
            xcopy %source%*.ba2 %dest% /D:%MMDDYY% /y

            dir %dest%*.ba2 /o-d /b>%dest%temp.txt

            sendmail.exe /u:h.h@a.com /t:test_envoi_mail /m:corps.txt /f:*.ba2 /e:a@a.com /p:25 /s:smtp.fr.oleane.com /@:a.com
            pause
            del %dest%*.ba2

            Voilà maintenant, j'ai ma liste de fichier du jour dans mon fichier .txt
            présenté sous la forme:
            fichier1.ba2
            fichier2.ba2
            fichier3.ba2

            et il faudrait que je re-formate mon fichier txt sous la forme suivante:
            fichier1.ba2,fhicer2.ba2,fichier3.ba2

            comme ça je pourrait peut-etre prendre le contenu du fichier.txt re-formaté afin d'ecrire la commande pour send mail suivante:
            sendmail.exe /u:h.h@acorel.com /t:test_envoi_mail /m:corps.txt /f:fichier1.ba2,fhicer2.ba2,fichier3.ba2 /e:a@a.com /p:25 /s:smtp.fr.oleane.com /@:acorel.com
            pause
            del %dest%*.ba2
            1. Contributeur
              essaye avec dir /T:W *.ba2 | find "21/10/2010"
              1. ok ça m'affiche bien les fichiers.ba2 du jour demandé
                Mais maintenant si je redirige ça dans un fichier texte il m'affichera ça en colonne.
                Afin de récupérer le contenu du fichier text pour le rentrer dans la commande sendmail il faut que j'ecrive tous ce que me ressort la commande dir (que tu m'a donné) sous la forme: fichier1.ba2,fhicer2.ba2,fichier3.ba2

                J'ai essayé avec for /f "delims=" %%i in ('type temp.txt') do echo %%i,>temp2.txt
                Mais à la sortie dans le fichier temp2.txt je n'ai que le nom du dernier fichier de la liste.
              2. Contributeur
                essaye
                C:> type f1.txt 
                fichier1.ba2 
                fichier2.ba2 
                fichier3.ba2 
                
                C:> bb 
                fichier1.ba2,fichier2.ba2,fichier3.ba2 
                
                C:> type  bb.bat 
                @echo off 
                
                setlocal enableDelayedExpansion 
                set liste= 
                for /f "delims=" %%a in ('type f1.txt ') do ( 
                set liste=!liste!,%%a 
                ) 
                echo %liste:~1,100% 
                
                C:>
            2. Voilà ça fonctionne avec ce qui suit après copie des fichiers dans le répertoire

              set sujet=test envoi plusieurs fichiers
              set exp=moi@dipisoft.com
              set dest=toi@dipisoft.com
              set corps=corps.txt
              set fichiers=c:\temp\*.log

              for %%i in (%fichiers%) do (
              set fic=%%i
              call :ajoutefic
              )

              set listefichiers=%listefichiers:~1%

              sendmail.exe /m:%corps% /u:%dest% /t:%sujet% /e:%exp% /f:%listefichiers% /l

              echo %errorlevel%

              pause

              exit

              :ajoutefic
              set listefichiers=%listefichiers%,%fic%

              Merci au créateur de sendmail du site dipisoft!