Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как указать относительный путь (http://forum.oszone.net/showthread.php?t=287507)

V!RTuE 05-09-2014 00:36 2398556

Как указать относительный путь
 
Есть такой код для отправки почты
Код:

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 2398571

Цитата:

Цитата V!RTuE
в 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

Цитата:

Цитата V!RTuE
2-й вопрос: если название файла точно неизвестно, но знаю что начинается на din*.rar, то также как указать в скрипте? »

Например, найти посредством регулярного выражения. Если укажете, где/откуда начинать поиск «din*.rar» — могу привести примерный код.

Цитата:

Цитата V!RTuE
3-й что означают цифры 2 и 1 в строках и какие могут быть другие значения? »

Искать здесь: http://schemas.microsoft.com/cdo/configuration/.

1. sendusing Field, возможные значения: CdoSendUsing Enum;
2. smtpauthenticate Field, возможные значения в случае, если для поля «sendusing» указано значение «cdoSendUsingPort»: CdoProtocolsAuthentication Enum.

V!RTuE 05-09-2014 01:40 2398573

Цитата:

Цитата Iska
Например, найти посредством регулярного выражения. Если укажете, где/откуда начинать поиск «din*.rar» — могу привести примерный код. »

вот мне нужен пример если скрипт запускается из той папки, где находится n-ое количество файлов din*.rar (ну и для примера, если находится в папке \BASE)
Также просьба учесть, что может запускаться скрипт как на сервере, так и в имени пути к данному скрипту могут быть пробелы (для bat/cmd знаю что надо в кавычки заключать). А для VBS также?

Цитата:

Цитата Iska
Код:
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 2398699

Цитата:

Цитата V!RTuE
скрипт запускается из той папки »

Цитата:

Цитата V!RTuE
если находится в папке »

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

Georgio 05-09-2014 17:25 2398862

Цитата:

Цитата 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"
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Iska 06-09-2014 04:09 2399062

Цитата:

Цитата Georgio
Replace(WScript.ScriptFullName,WScript.ScriptName,"") »

Теоретически в полном пути может попасться папка, одноимённая с именем скрипта.

Georgio 06-09-2014 08:55 2399080

Цитата:

Цитата Iska
Теоретически в полном пути может попасться папка, одноимённая с именем скрипта. »


Справедливое замечание. Чтобы это предусмотреть, предложу такие варианты:
Код:

Replace(WScript.ScriptFullName&"*",WScript.ScriptName&"*","")
и
Код:

Wscript.CreateObject("Scripting.FileSystemObject").GetFile(WScript.ScriptFullName).ParentFolder&"\"
.

Iska 06-09-2014 16:31 2399242

Цитата:

Цитата Georgio
Код:

Replace(WScript.ScriptFullName&"*",WScript.ScriptName&"*","")
»

;).

Georgio 07-09-2014 17:59 2399642

Ещё пара вариантов:
Код:

Left(WScript.ScriptFullname,Instrrev(WScript.ScriptFullname,"\"))
и
Код:

WScript.CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)&"\"
.

ypmail 21-12-2014 09:57 2446309

Цитата:

Цитата Georgio
Код:
WScript.CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)&"\"
. »

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

Iska 21-12-2014 12:42 2446342

ypmail, приведите Ваш неадаптированный код.


Время: 00:57.

Время: 00:57.
© OSzone.net 2001-