Войти

Показать полную графическую версию : [решено] Как указать относительный путь


V!RTuE
05-09-2014, 00:36
Есть такой код для отправки почты
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

Iska
05-09-2014, 01:32
в 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).

V!RTuE
05-09-2014, 01:40
Например, найти посредством регулярного выражения. Если укажете, где/откуда начинать поиск «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. Эти все файлы находятся в той же папке, где и сам скрипт

Iska
05-09-2014, 13:15
скрипт запускается из той папки »
если находится в папке »
V!RTuE, так Вам что нужно, не пойму: папка, из которой скрипт запускается — текущий каталог для скрипта, или же папка, в которой находится сам скрипт? Это в корне разные вещи, хоть и могут в большинстве случаев совпадать.

Georgio
05-09-2014, 17:25
в 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"
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!

Iska
06-09-2014, 04:09
Replace(WScript.ScriptFullName,WScript.ScriptName,"") »
Теоретически в полном пути может попасться папка, одноимённая с именем скрипта.

Georgio
06-09-2014, 08:55
Теоретически в полном пути может попасться папка, одноимённая с именем скрипта. »


Справедливое замечание. Чтобы это предусмотреть, предложу такие варианты: Replace(WScript.ScriptFullName&"*",WScript.ScriptName&"*","") и Wscript.CreateObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName).ParentFolder&"\".

Iska
06-09-2014, 16:31
Replace(WScript.ScriptFullName&"*",WScript.ScriptName&"*","") »
;).

Georgio
07-09-2014, 17:59
Ещё пара вариантов: Left(WScript.ScriptFullname,Instrrev(WScript.ScriptFullname,"\")) и WScript.CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)&"\".

ypmail
21-12-2014, 09:57
Код:
WScript.CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)&"\"
. »

Не получается этот вариант адаптировать под запуск файла, находящегося в той же папке, что и скрипт. Можно полный код?

Iska
21-12-2014, 12:42
ypmail, приведите Ваш неадаптированный код.




© OSzone.net 2001-2012