Vbscript 如何在批处理脚本中调用或嵌入VBS

Vbscript 如何在批处理脚本中调用或嵌入VBS,vbscript,batch-file,batch-processing,Vbscript,Batch File,Batch Processing,我希望批处理发送电子邮件,但由于mailto命令在我未单击“发送”按钮之前不会通过outlook发送电子邮件 我在网上发现了这个VBS脚本,它发送电子邮件时不需要人工交互 我只是需要帮助电话,或者如果我可以嵌入VBS到批处理文件 ' Create email object Set oolApp = CreateObject("Outlook.Application") Set email = oolApp.CreateItem(0) email.Recipients.Add("myemail@e

我希望批处理发送电子邮件,但由于mailto命令在我未单击“发送”按钮之前不会通过outlook发送电子邮件

我在网上发现了这个VBS脚本,它发送电子邮件时不需要人工交互

我只是需要帮助电话,或者如果我可以嵌入VBS到批处理文件

' Create email object
Set oolApp = CreateObject("Outlook.Application")
Set email = oolApp.CreateItem(0)
email.Recipients.Add("myemail@esomeemail.com")

' Create the body of the email
MailBody = "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD W3 HTML//EN"">"
MailBody = MailBody & "<HTML>" & vbcrlf
MailBody = MailBody & "<HEAD><TITLE>No Invoices</TITLE></HEAD>"
MailBody = MailBody & "<BODY>" & vbcrlf
MailBody = MailBody & "<B>For Your Information</B>,<BR><BR>"
MailBody = MailBody & "No invoices were issued today.<BR><BR>"
MailBody = MailBody & "</BODY></HTML>"

' Send the Email
email.Subject = "No Invoices Issued"
email.HTMLBody = MailBody
email.Send
创建电子邮件对象 设置oolApp=CreateObject(“Outlook.Application”) 设置email=oolApp.CreateItem(0) email.Recipients.Add(“myemail@esomeemail.com") '创建电子邮件的正文 MailBody=“” MailBody=MailBody&&vbcrlf MailBody=MailBody&“无发票” MailBody=MailBody&&vbcrlf MailBody=MailBody&“有关您的信息,

” MailBody=MailBody&“今天没有开具发票。” MailBody=MailBody&“” '发送电子邮件 email.Subject=“未开具发票” email.HTMLBody=邮件正文 发送电子邮件
编辑:现在我重读了你的问题,我不太确定你在问什么。您是在问如何运行vbscript吗?只需将其保存到
filename.vbs
并使用

cscript filename.vbs
(或
cscript/nologo filename.vbs
,如果您希望避免显示Microsoft的cscript垃圾邮件)


另一方面,如果您想将其合并到批处理脚本中,那么有很多方法可以将内容从批处理脚本回显到外部文件。大多数人只是做一些类似的事情

echo Set oolApp = CreateObject^("Outlook.Application"^)>> vbsfile
或类似,根据需要使用
^
进行转义。但是,您可能会发现它很有用。下面是一个使用“昨天”的示例:

@if (@X)==(@Y) @end /* (batch + jscript hybrid script init)

:: *** Batch script *****

@echo off
setlocal enabledelayedexpansion

set recipient=myemail@esomeemail.com

for /f "delims=" %%I in ('wget "%~1" -O- -q 2^>NUL ^| findstr /i "last.*updated.*as.*of"') do (
    for /f "delims=" %%x in ('cscript /nologo /e:jscript "%~f0" "%%I"') do (
        set /a "thirtyMinutes = 30 * 60 * 1000"
        if %%x GEQ !thirtyMinutes! (
            call :doEmail
        )
    )
    exit /b
)
exit /b

:doEmail
call :heredoc vbs >email.vbs && goto endvbs
' Create email object
Set oolApp = CreateObject("Outlook.Application")
Set email = oolApp.CreateItem(0)
email.Recipients.Add("!recipient!")

' Create the body of the email
MailBody = "<^!DOCTYPE HTML PUBLIC ""-//W3C//DTD W3 HTML//EN"">"
MailBody = MailBody & "<HTML>" & vbcrlf
MailBody = MailBody & "<HEAD><TITLE>No Invoices</TITLE></HEAD>"
MailBody = MailBody & "<BODY>" & vbcrlf
MailBody = MailBody & "<B>For Your Information</B>,<BR><BR>"
MailBody = MailBody & "No invoices were issued today.<BR><BR>"
MailBody = MailBody & "</BODY></HTML>"

' Send the Email
email.Subject = "No Invoices Issued"
email.HTMLBody = MailBody
email.Send
:endvbs

cscript /nologo email.vbs
del email.vbs
goto :EOF

:: https://stackoverflow.com/a/15032476/1683264
:heredoc <uniqueIDX>
setlocal enabledelayedexpansion
set go=
for /f "delims=" %%A in ('findstr /n "^" "%~f0"') do (
    set "line=%%A" && set "line=!line:*:=!"
    if defined go (if #!line:~1!==#!go::=! (goto :EOF) else echo(!line!)
    if "!line:~0,13!"=="call :heredoc" (
        for /f "tokens=3 delims=>^ " %%i in ("!line!") do (
            if #%%i==#%1 (
                for /f "tokens=2 delims=&" %%I in ("!line!") do (
                    for /f "tokens=2" %%x in ("%%I") do set "go=%%x"
                )
            )
        )
    )
)
goto :EOF

:: *** JScript script *****/
var args = [];
for (var i=0; i<WScript.arguments.length; i++) { args.push(WScript.arguments(i)) }
var t = args.join(' ').replace(/^\s+|<[^>]+>|\s+$/g,'').replace(/\&nbsp;/g, ' ').split(' ');
var h = t[4].split(':')[0];
if (/pm/i.test(t[5])) h = h * 1 + 12;
var ds = t[6] + ' ' + t[7] + ', ' + new Date().getFullYear() + ' ' + h + ':' + t[4].split(':')[1];
var diff = new Date() - new Date(ds);
WScript.echo(diff);
@if(@X)=(@Y)@end/*(批处理+jscript混合脚本init)
:***批处理脚本*****
@回音
延迟扩展
设置收件人=myemail@esomeemail.com
对于/f“delims=“%%I in('wget”%%~1“-O--q 2^>NUL^ | findstr/I”last.*已更新。*如“.”的。*所做(
对于/f“delims=“%%x in('cscript/nologo/e:jscript“%%f0”“%%I”)执行(
设置/a“三十分钟=30*60*1000”
如果%%x GEQ!三十分钟(
电话:doEmail
)
)
退出/b
)
退出/b
:doEmail
调用:herdoc vbs>email.vbs&&goto endvbs
'创建电子邮件对象
设置oolApp=CreateObject(“Outlook.Application”)
设置email=oolApp.CreateItem(0)
email.Recipients.Add(“!recipient!”)
'创建电子邮件的正文
MailBody=“”
MailBody=MailBody&&vbcrlf
MailBody=MailBody&“无发票”
MailBody=MailBody&&vbcrlf
MailBody=MailBody&“有关您的信息,

” MailBody=MailBody&“今天没有开具发票。” MailBody=MailBody&“” '发送电子邮件 email.Subject=“未开具发票” email.HTMLBody=邮件正文 发送电子邮件 :endvbs cscript/nologo email.vbs del email.vbs 后藤:EOF :: https://stackoverflow.com/a/15032476/1683264 :埃雷多克 延迟扩展 出发= 对于/f“delims=“%%A in('findstr/n“^”“%~f0”)do( 设置“行=%%A”和设置“行=!行:*=!” 如果定义了go(如果#!行:~1!=#!go::=!(转到:EOF)否则回显(!行!) 如果“!line:~0,13!”==“调用:herdeoc”( 对于/f“tokens=3 delims=>^”%%i in(“!line!”)do( 如果#%%i==#%1( 对于/f“tokens=2 delims=&”%%I in(“!line!”)do( 对于“%%I”中的/f“tokens=2”%%x,请设置“go=%%x” ) ) ) ) ) 后藤:EOF ::***JScript脚本*****/ var args=[]; 对于(var i=0;i |\s+$/g')。替换(/\/g')。拆分(“”); var h=t[4]。拆分(':')[0]; 如果(/pm/i.test(t[5])h=h*1+12; var ds=t[6]+'+t[7]+','+new Date().getFullYear()+'+h+':'+t[4].拆分(':')[1]; var diff=新日期()-新日期(ds); echo(diff);

我还没有测试过这个,但是试着玩一下,看看你怎么想。

嗨,你还记得你昨天帮我写的东西吗?所以我试着让bat脚本通过outlook向我发送电子邮件,如果从上次更新到现在已经30分钟了。谢谢扫描请告诉我下面的代码是什么
goto:EOF
?谢谢JScript的东西是什么刮伤了o输出
wget
。它去掉html标记,修剪空白,并将
转换为空格,以获得上次更新的
文本,更新时间为3月11日晚上11:14
文本。然后,它将该文本位转换为日期对象,从当前日期中减去它,并回显毫秒差。该差被捕获作为脚本顶部附近的
%%x
。它与以前一样。我的意思是,如果vbscript对您不起作用,您也可以使用或类似的方式向自己发送电子邮件。我不明白为什么不可以。您尝试过吗?用静态URL替换
%%1
。将其保留为引号。