Показать полную графическую версию : [решено] Как указать относительный путь
Есть такой код для отправки почты
strEmail = "mymail@mail.ru"
strSMTP = "smtp.mail.ru"
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "mymail@mail.ru"
objEmail.To = "mymail@mail.ru"
objEmail.Subject = "ЗАГОЛОВОК ПИСЬМА"
objEmail.Textbody = "СОДЕРЖАНИЕ_ПИСЬМА"
objEmail.AddAttachment "???program.exe"
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "mymail@mail.ru"
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "mypassword"
objEmail.Configuration.Fields.Update
objEmail.Send
в bat/cmd просто - "%~dp0program.exe".
2-й вопрос: если название файла точно неизвестно, но знаю что начинается на din*.rar, то также как указать в скрипте?
3-й что означают цифры 2 и 1 в строках и какие могут быть другие значения?
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
в bat/cmd просто - "%~dp0program.exe". »
В WSH:
Dim objFSO
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
WScript.Echo objFSO.BuildPath(objFSO.GetParentFolderName(WScript.ScriptFullName), "program.exe")
Set objFSO = Nothing
2-й вопрос: если название файла точно неизвестно, но знаю что начинается на din*.rar, то также как указать в скрипте? »
Например, найти посредством регулярного выражения. Если укажете, где/откуда начинать поиск «din*.rar» — могу привести примерный код.
3-й что означают цифры 2 и 1 в строках и какие могут быть другие значения? »
Искать здесь: http://schemas.microsoft.com/cdo/configuration/ (http://msdn.microsoft.com/en-us/library/ms526318(v=exchg.10).aspx).
1. sendusing Field (http://msdn.microsoft.com/en-us/library/ms526994(v=exchg.10).aspx), возможные значения: CdoSendUsing Enum (http://msdn.microsoft.com/en-us/library/ms527265(v=exchg.10).aspx);
2. smtpauthenticate Field (http://msdn.microsoft.com/en-us/library/ms526600(v=exchg.10).aspx), возможные значения в случае, если для поля «sendusing» указано значение «cdoSendUsingPort»: CdoProtocolsAuthentication Enum (http://msdn.microsoft.com/en-us/library/ms526961(v=exchg.10).aspx).
Например, найти посредством регулярного выражения. Если укажете, где/откуда начинать поиск «din*.rar» — могу привести примерный код. »
вот мне нужен пример если скрипт запускается из той папки, где находится n-ое количество файлов din*.rar (ну и для примера, если находится в папке \BASE)
Также просьба учесть, что может запускаться скрипт как на сервере, так и в имени пути к данному скрипту могут быть пробелы (для bat/cmd знаю что надо в кавычки заключать). А для VBS также?
Код:
Dim objFSO
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
WScript.Echo objFSO.BuildPath(objFSO.GetParentFolderName(WScript.ScriptFullName), "program.exe")
Set objFSO = Nothing »
и что-то не получается у меня. куда его вставлять? у меня сначала появляется окно, где написан полный путь к program.exe и после выдает ошибку в строке
objEmail.AddAttachment "program.exe"
P.S.: В общем мне надо с помощью этого скрипта отправить файл program.exe и все din*.rar. Эти все файлы находятся в той же папке, где и сам скрипт
скрипт запускается из той папки »
если находится в папке »
V!RTuE, так Вам что нужно, не пойму: папка, из которой скрипт запускается — текущий каталог для скрипта, или же папка, в которой находится сам скрипт? Это в корне разные вещи, хоть и могут в большинстве случаев совпадать.
в bat/cmd просто - "%~dp0program.exe". »
В VBS тоже просто: «Replace(WScript.ScriptFullName,WScript.ScriptName,"")&"program.exe"».
Пример:
WScript.Echo Replace(WScript.ScriptFullName,WScript.ScriptName,"")&"program.exe"
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!
'' Если "program.exe" находится в одной директории с файлом сценария VBScript, то:
'' ===============================================================================
'' 1) эта строка выполнит запуск "program.exe" как при запуске VBS-файла из проводника,
'' так и при запуске VBS-файла из командной строки:
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
WScript.CreateObject("Shell.Application").ShellExecute Replace(WScript.ScriptFullName,WScript.ScriptName,"")&"program.exe"
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'' 2) эта строка выполнит запуск "program.exe" только при запуске VBS-файла из проводника,
'' а при запуске VBS-файла из командной строки получим ошибку:
'' "Не удатся найти "program.exe". Проверьте, правильно ли указано имя и повтоите попытку."
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
WScript.CreateObject("Shell.Application").ShellExecute "program.exe"
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!
Replace(WScript.ScriptFullName,WScript.ScriptName,"") »
Теоретически в полном пути может попасться папка, одноимённая с именем скрипта.
Теоретически в полном пути может попасться папка, одноимённая с именем скрипта. »
Справедливое замечание. Чтобы это предусмотреть, предложу такие варианты: Replace(WScript.ScriptFullName&"*",WScript.ScriptName&"*","") и Wscript.CreateObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName).ParentFolder&"\".
Replace(WScript.ScriptFullName&"*",WScript.ScriptName&"*","") »
;).
Ещё пара вариантов: Left(WScript.ScriptFullname,Instrrev(WScript.ScriptFullname,"\")) и WScript.CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)&"\".
Код:
WScript.CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)&"\"
. »
Не получается этот вариант адаптировать под запуск файла, находящегося в той же папке, что и скрипт. Можно полный код?
ypmail, приведите Ваш неадаптированный код.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.