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

  • Votes
  • Date
  • Date décroissante
  1. 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!
    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. 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
        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. 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. 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?