2016-10-28 2 views
0

배치 파일을 폴더 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 파일 :

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%") 

변수 attachmentFullNamenamed parameter%AttachmentFullName%의 인수를 할당한다. 그러나 작동하도록하려면 해당 이름의 명명 된 매개 변수로 VBScript를 실제로 호출해야합니다. VBScript를 명명 된 매개 변수는 다음과 같이 작동 :

cscript.exe script.vbs /param:value 

이 경우 호출은 다음과 같이해야한다는 것을 의미 :

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

실제로 매개 변수 이름 시작과 % 문자로 끝나는를 얻을 수 있습니다.

일괄 변수 %AttachmentFullName%의 값을 VBScript에 unnamed argument으로 전달하려는 경우가 많습니다.

attachmentFullName = WScript.Arguments.Unnamed(0) 

이 같은 VBScript를 호출 : 그 문이에

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

을 변경 이렇게하려면 스크립트 변수 주위에 따옴표를

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를 반복 처리를하고 첨부 각 메일에 :

+0

그것은 작동하지만 방금 하나의 파일을 다른 폴더와 하나의 이메일로 보냈습니다. 그리고 나는 모든 파일을 다른 폴더에 보내고 동일한 첨부 파일을 이메일에 보내고 싶습니다. – djva

관련 문제