2016-10-28 131 views
0

批处理文件:移动文件到其他文件夹,发送文件夹中的网址上的电子邮件附件

@echo off 
set source=D:\teste 
set target=D:\trab 

for /F "delims=" %%I in ('dir %source%\*.* /A:-D /O:D /B') do move %source%\%%I %target% & echo %%I %source%\%%I & goto :continue 
:continue 

set p/ AttachmentFullName=%target%\<<fileName.txt>> 

cscript.exe //NoLogo "D:\partilhas\correo.vbs" %AttachmentFullName% 

timeout 20 

VBScript文件:

Set objMail = CreateObject("CDO.Message") 
Set objConf = CreateObject("CDO.Configuration") 
Set objFlds = objConf.Fields 

Dim attachmentFullName 
attachmentFullName = WScript.Arguments.Named("%AttachmentFullName%") 

objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'cdoSendUsingPort 
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.SMTP.com" 
objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
'objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "NAME" 
'objFlds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "PWS" 
'objFlds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 'cdoBasic 
objFlds.Update 
objMail.Configuration = objConf 
objMail.From = "[email protected]" 
objMail.To = "[email protected]" 
objMail.Subject = "Email Subject Text" 
objMail.AddAttachment attachmentFullName 
objMail.TextBody = "The message of the email..." 
objMail.Send 
Set objFlds = Nothing 
Set objConf = Nothing 
Set objMail = Nothing 

我想是从文件夹中最早的获取文件到最新一个接一个地发送一封电子邮件。作为发送相同邮件号码的文件号码并移动相同的次数。有人帮忙?

回答

0

你的问题对你遇到的问题不太清楚,但大概是你的参数传递。

线

attachmentFullName = WScript.Arguments.Named("%AttachmentFullName%") 

分配named parameter%AttachmentFullName%到可变attachmentFullName的论点。然而,为了实现这一点,你必须实际使用该名称的命名参数调用VBScript。在VBScript命名参数的工作是这样的:

cscript.exe script.vbs /param:value 

这意味着在你的情况下,呼叫必须是这样的:

cscript.exe script.vbs /^%AttachmentFullName^%:value 

实际得到的参数名称开始,以%字符结尾。

更可能希望将批处理变量%AttachmentFullName%的值作为unnamed argument传递给VBScript。要做到这一点改变声明

attachmentFullName = WScript.Arguments.Named("%AttachmentFullName%") 

这样:

attachmentFullName = WScript.Arguments.Unnamed(0) 

,并调用VBScript的是这样的:

cscript.exe //NoLogo "D:\partilhas\correo.vbs" "%AttachmentFullName%" 

注意周围的变量的双引号,这样你的脚本不要”当路径包含空格时会中断。

至于如何让第一个赋值为该批处理变量,目前您似乎在您的for循环中回显文件名并提示用户手动输入它。

set p/ AttachmentFullName=%target%\<<fileName.txt>> 

首先,上述语句不正确,会引发错误。但即使它实际工作,你应该路径分配给循环,而不需要用户交互中的变量:

for /F "delims=" %%I in ('dir %source%\*.* /A:-D /O:D /B') do (
    move "%source%\%%~I" "%target%" 
    set "AttachmentFullName=%target%\%%~I" 
    goto :continue 
) 

编辑:要添加您需要从环取出goto所有复制的文件和追加到变量(需要delayed expansion)。围绕每个路径添加双引号内循环,并将它传递给VBScript的时候不要把周围的附件可变双引号:

setlocal EnableDelayedExpansion 
for /F "delims=" %%I in ('dir %source%\*.* /A:-D /O:D /B') do (
    move "%source%\%%~I" "%target%" 
    set "Attachments=!Attachments! ^"%target%\%%~I^"" 
) 

cscript.exe //NoLogo "D:\partilhas\correo.vbs" %Attachments% 

然后让VBScript的遍历(未命名)参数和附加他们每个人的邮件:

For Each arg In WScript.Arguments.Unnamed 
    objMail.AddAttachment arg 
Next 
+0

它的工作原理,但只是发送一个文件到其他文件夹和一个电子邮件,我想发送到其他文件夹中的所有文件和电子邮件的相同数量的附件 – djva

相关问题