배치 파일:
@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
내가 원하는 것은 가장 오래된 폴더에서 최신 폴더로 파일을 하나씩 가져 와서 각각 첨부 된 이메일을 보내는 것입니다. 파일 번호로 같은 메일 번호를 보내고 같은 횟수로 이동합니다. 누군가 도와 주나요?
귀하의 질문은 귀하가 겪고있는 문제에 대해 너무 명확하지 않지만 아마도 매개 변수 전달 일 것입니다.
라인
attachmentFullName = WScript.Arguments.Named("%AttachmentFullName%")
명명 된 매개 변수 의 인수를 변수%AttachmentFullName%
에 할당합니다 attachmentFullName
. 그러나 이것이 작동하려면 실제로 해당 이름의 명명 된 매개 변수로 VBScript를 호출해야합니다. VBScript에서 명명 된 매개 변수는 다음과 같이 작동합니다.
cscript.exe script.vbs /param:value
귀하의 경우 호출은 다음과 같아야 함을 의미합니다.
cscript.exe script.vbs /^%AttachmentFullName^%:value
실제로 %
문자로 시작하고 끝나는 매개 변수 이름을 가져옵니다 .
배치 변수의 값을 명명되지 않은 인수%AttachmentFullName%
로 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
루프에서 를 제거 하고 변수에 추가해야합니다 ( 지연된 확장 필요 ). 루프 내부 의 각 경로 주위에 큰 따옴표를 추가 하고 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
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다