2016-10-28 4 views
0

Batch-Datei auf E-Mail-Anhang senden:Datei verschieben, um einen anderen Ordner und den Ordner URL

@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-Datei:

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 

Was ich will, ist die Datei von einem Ordner ältesten bis neuesten bekommen eins nach dem anderen und sende eine E-Mail mit jedem Anhang. Als Dateinummer die gleiche Mail-Nummer senden und gleich oft verschieben. Jemand Hilfe?

Antwort

0

Ihre Frage ist nicht klar über das Problem, das Sie haben, aber vermutlich ist es Ihre Parameterübergabe.

Die Linie

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

weist das Argument einer named parameter%AttachmentFullName% auf die Variable attachmentFullName. Damit dies jedoch funktioniert, müssen Sie das VBScript tatsächlich mit einem benannten Parameter dieses Namens aufrufen. Benannte Parameter in VBScript arbeiten wie folgt aus:

cscript.exe script.vbs /param:value 

was bedeutet, dass der Anruf in Ihrem Fall würde wie folgt aussehen haben:

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

, um tatsächlich einen Parameternamen zu bekommen beginnt und mit einem % Zeichen endet.

Es ist wahrscheinlicher, dass Sie den Wert der Stapelvariablen %AttachmentFullName% an das VBScript als unnamed argument übergeben möchten. Um das zu tun, die Aussage ändern

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

dazu:

attachmentFullName = WScript.Arguments.Unnamed(0) 

und rufen Sie die VBScript wie folgt aus:

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

Beachten Sie die Anführungszeichen um die Variable, so dass Ihre Skripte don‘ t break, wenn ein Pfad Leerzeichen enthält.

Um diese Stapelvariable mit einem Wert an erster Stelle zugewiesen zu bekommen, scheinen Sie derzeit den Dateinamen in Ihrer for Schleife zu wiederholen und den Benutzer aufzufordern, sie manuell einzugeben.

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

Zum einen ist die obige Aussage falsch und würde einen Fehler werfen. Aber selbst wenn es tatsächlich funktioniert, sollten Sie den Pfad zu Ihrer Variable innerhalb der Schleife zuweisen statt erfordern Interaktion mit dem Benutzer:

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

Edit: alle kopierten Dateien hinzuzufügen, müssen Sie die goto aus der Schleife entfernen und hängen an die Variable (erfordert delayed expansion).In doppelte Anführungszeichen um jeden Pfad innerhalb die Schleife, und nicht setzen doppelte Anführungszeichen um die Anhänge Variable, wenn es um die VBScript vorbei:

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% 

Dann haben die VBScript Iterierte über die (unbenannt) Argumente und befestigen Jeder von ihnen an die Mail:

+0

Es funktioniert, aber nur eine Datei an andere Ordner und eine E-Mail gesendet und ich möchte alle Dateien an andere Ordner und die gleiche Anzahl von Anlagen in E-Mails gesendet – djva

Verwandte Themen