2016-10-28 48 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

相關問題