8

Im using sendemail in a batch file. At the end of sending an email it replys with a message of succses or failure. For example

Jan 10 00:46:54 villa sendemail[456]: Email was sent successfully!

Is it possible to capture this message into a variable for processing?

Thx

Stu Thompson
  • 38,370
  • 19
  • 110
  • 156
jason
  • 149
  • 1
  • 2
  • 6

2 Answers2

16

Yes, you need to execute sendmail through the for loop:

for /f "tokens=*" %%a in ('[sendmail command line]') do (
    set VAR=%%a
)

After this runs, VAR will be set to the last line that sendmail output. You can then do processing on that line

for /f "tokens=5,* delims= " %%a in (%VAR%) do (
    if "%%b"=="Email was sent successfully!" (
        echo SUCCESS
        exit /b 0
    ) else (
        echo FAILURE
        exit /b 1
    )
)
esac
  • 24,099
  • 38
  • 122
  • 179
  • 5
    Notice to myself: start looking for such things on Stackoverflow instead of google. – Marc Wittke Jun 17 '10 at 06:42
  • what about a command line like `strings %1 -t d | grep -e "[0-9]\{1,3\}"`? (tihs one with unxutils, but potentially with windows-only programs) – n611x007 Sep 13 '13 at 12:39
  • Thanks. This can be ran in cmd.exe outside of a BAT file as one command: `for /f %a in ('type file.txt') do (set VAR=%a)`. DO NOT do this: `for /f %a in ('type file.txt') do ( set VAR=%a )` (VAR = contents of file.txt plus one space character); don't do it unless you want a space at the end. – Rublacava Sep 03 '21 at 04:16
-1

normally, you just use the for loop to capture the output. see here notes 4. (and search internet for more)

ghostdog74
  • 327,991
  • 56
  • 259
  • 343