• Уменьшение отступа

    Обратная связь

    (info@ru-sfera.pw)

Помощь.Скриптовые языки программирования (VBS, Jscript)


UserOK

Уважаемый пользователь
Форумчанин
Регистрация
04.11.2014
Сообщения
205
Репутация
104
Подскажите,пожалуйста,как прикрутить использование переменных сред типа %Userprofile% , %TempDir% и пр в VBS вместо постоянного пути в выделенной строке.
Dim o_Mess, v_Conf
v_Conf = " "
Set o_Mess = CreateObject("CDO.Message")
With o_Mess
.To = "secret.abc@yandex.ru" 'куда отправляем
.From = "Иван Иванов <secret.abc@yandex.ru>" 'имя отправителя + Email
.Subject = "Subj" 'Тема письма
.TextBody = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Documents and Settings\Вася Пупкин\отчет.log")
.AddAttachment "C:\help\1.txt" 'Прикрепить файл
.TextBodyPart.Charset = "windows-1251" 'русская кодировка
With .Configuration.Fields
.Item(v_Conf & "sendusing") = 2 'без использования каталога Server Exchange
.Item(v_Conf & "smtpserver") = "smtp.yandex.ru" 'Адрес SMTP-сервера
.Item(v_Conf & "smtpauthenticate") = 1 'Тип авторизации
.Item(v_Conf & "sendusername") = "secret.abc" 'здесь имя пользователя без @
.Item(v_Conf & "sendpassword") = "password" 'пароль
.Item(v_Conf & "smtpserverport") = 465 'порт (альтернативный - 465)
.Item(v_Conf & "smtpusessl") = False 'использовать ли шифрованое подключение SSL
.Item(v_Conf & "smtpconnectiontimeout") = 60 'Время до завершения повторных попыток подключения
.Update
End With
.send
End With
Set o_Mess = Nothing

Покурив маны,понял что делать надо через ExpandEnvironmentStrings типа:
Set objShell=Createobject("Wscript.Shell")
Wscript.Echo objShell.ExpandEnvironmentStrings("%USERPROFILE%")
а вместе Не въехал!!!слепить не получается Как об стену !!!
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 174
Подскажите,пожалуйста,как прикрутить использование переменных сред типа %Userprofile% , %TempDir% и пр в VBS вместо постоянного пути в выделенной строке.
VBS и Jscript это разные языки и подходы там разные, если нужно именно для VBS, то вот пример кода, выведет путь %Userprofile% на экран:

Код:
Const USER_PROFILE = &H28&

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(USER_PROFILE)
Set objFolderItem = objFolder.Self
Wscript.Echo objFolderItem.Path

Const USER_PROFILE = &H28& это как-раз код, вот часть расшифровки, основные папки:

'Вывод путей и заголовков всех возможных специальных папок.

On Error Resume Next
Set List = ("Scripting.Dictionary")
List.Add &H1d, "ssfALTSTARTUP"
List.Add &H1a, "ssfAPPDATA"
List.Add &Ha, "ssfBITBUCKET"
List.Add &H1e, "ssfCOMMONALTSTARTUP"
List.Add &H23, "ssfCOMMONAPPDATA"
List.Add &H19, "ssfCOMMONDESKTOPDIR"
List.Add &H1f, "ssfCOMMONFAVORITES"
List.Add &H17, "ssfCOMMONPROGRAMS"
List.Add &H16, "ssfCOMMONSTARTMENU"
List.Add &H18, "ssfCOMMONSTARTUP"
List.Add &H3, "ssfCONTROLS"
List.Add &H21, "ssfCOOKIES"
List.Add &H0, "ssfDESKTOP"
List.Add &H10, "ssfDESKTOPDIRECTORY"
List.Add &H11, "ssfDRIVES"
List.Add &H6, "ssfFAVORITES"
List.Add &H14, "ssfFONTS"
List.Add &H22, "ssfHISTORY"
List.Add &H20, "ssfINTERNETCACHE"
List.Add &H1c, "ssfLOCALAPPDATA"
List.Add &H27, "ssfMYPICTURES"
List.Add &H13, "ssfNETHOOD"
List.Add &H12, "ssfNETWORK"
List.Add &H5, "ssfPERSONAL"
List.Add &H4, "ssfPRINTERS"
List.Add &H1b, "ssfPRINTHOOD"
List.Add &H28, "ssfPROFILE"
List.Add &H26, "ssfPROGRAMFILES"
List.Add &H2, "ssfPROGRAMS"
List.Add &H8, "ssfRECENT"
List.Add &H9, "ssfSENDTO"
List.Add &Hb, "ssfSTARTMENU"
List.Add &H7, "ssfSTARTUP"
List.Add &H25, "ssfSYSTEM"
List.Add &H15, "ssfTEMPLATES"
List.Add &H24, "ssfWINDOWS"

Можно конечно по разному делать...Отдыхай!!!
 

UserOK

Уважаемый пользователь
Форумчанин
Регистрация
04.11.2014
Сообщения
205
Репутация
104
Можно конечно по разному делать...Отдыхай!!!
Можно,когда знаешь какDmeh-Smeh-Smeh!!!
Один фиг не работает у меня ничего.Не понимаю я многих команд.Знаю,что просто,но не понимаюКак об стену !!!
Сделал так
Const USER_PROFILE = &H28&
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(USER_PROFILE)
Dim o_Mess, v_Conf
v_Conf = " "
Set o_Mess = CreateObject("CDO.Message")
With o_Mess
.To = "secret.abc@yandex.ru" 'куда отправляем
.From = "Иван Иванов <secret.abc@yandex.ru>" 'имя отправителя + Email
.Subject = "Subj" 'Тема письма
.TextBody = CreateObject("Scripting.FileSystemObject").OpenTextFile("USER_PROFILE\отчет.log")
.AddAttachment "C:\help\1.txt" 'Прикрепить файл
.TextBodyPart.Charset = "windows-1251" 'русская кодировка
With .Configuration.Fields
.Item(v_Conf & "sendusing") = 2 'без использования каталога Server Exchange
.Item(v_Conf & "smtpserver") = "smtp.yandex.ru" 'Адрес SMTP-сервера
.Item(v_Conf & "smtpauthenticate") = 1 'Тип авторизации
.Item(v_Conf & "sendusername") = "secret.abc" 'здесь имя пользователя без @
.Item(v_Conf & "sendpassword") = "password" 'пароль
.Item(v_Conf & "smtpserverport") = 465 'порт (альтернативный - 465)
.Item(v_Conf & "smtpusessl") = False 'использовать ли шифрованое подключение SSL
.Item(v_Conf & "smtpconnectiontimeout") = 60 'Время до завершения повторных попыток подключения
.Update
End With
.send
End With
Set o_Mess = Nothing
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 174
Один фиг не работает у меня ничего.Не понимаю я многих команд.Знаю,что просто,но не понимаюКак об стену !!!
А что конкретно не работает ?

Отладку тогда лучше делать по частям:

1. %Userprofile% верно определяет ? Я у себя попробовал, вроде определяет верно, система 7-ка;

2. Далее попробуй отдельно отправить какой-нить файл и т.д.

Т.е. проги отлаживать нужно по микроскопической задаче, а потом объединять в одно целое, я так обычно делаю...
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 174
.TextBody = CreateObject("Scripting.FileSystemObject").OpenTextFile("USER_PROFILE\отчет.log")
Вот тут точно ошибка:

Вместо этого, можно попробовать так:

Код:
Set objFolderItem = objFolder.Self
.TextBody = CreateObject("Scripting.FileSystemObject").OpenTextFile(objFolderItem.Path + "\отчет.log")

VBS плохо знаю, но по логике - Это правильней, либо что-то такого нужно будет сделать...
 

UserOK

Уважаемый пользователь
Форумчанин
Регистрация
04.11.2014
Сообщения
205
Репутация
104
Именно здесь косяк.А так скрипт отрабатывает нормально.
С предложенным вариантом ошибка "несоответствие типа TextBody"
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 174
Именно здесь косяк.А так скрипт отрабатывает нормально.
С предложенным вариантом ошибка "несоответствие типа TextBody"
А может дело в файле отчет.log, в указанной мной есть ошибка, не нужна палка "\", т.е. нужно просто "отчет.log", если не заработает, то можно попробовать так (Обязательно с палкой):
Код:
.TextBody = CreateObject("Scripting.FileSystemObject").OpenTextFile(objFolderItem.Path & "\отчет.log")
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 174
С предложенным вариантом ошибка "несоответствие типа TextBody"
Хотя может конструкция срабатывает верно, но данные в отчет.log не в текстовом формате, а должны-быть в текстовом...

Можно ещё так попробовать:

.TextBody =CStr(CreateObject("Scripting.FileSystemObject").OpenTextFile(objFolderItem.Path & "\отчет.log"))

ИЛИ:

.TextBody =CStr(CreateObject("Scripting.FileSystemObject").OpenTextFile(objFolderItem.Path + "\отчет.log"))

С палкой, или без незнаю...Dmeh-Smeh-Smeh!!!

Если не заработает, то нужно пробовать по полному пути, т.е.:

.TextBody = CreateObject("Scripting.FileSystemObject").OpenTextFile("полный_путь\отчет.log")

Если не отработает, то не воспринимает файл "отчет.log", ибо должен-быть текстовый формат, т.е. "отчет.txt"...
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 174
Так ради интереса глянул и переделал конструкцию так:

Код:
Const USER_PROFILE = &H28&

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(USER_PROFILE)
Set objFolderItem = objFolder.Self
UserPath=objFolderItem.Path
Text=CreateObject("Scripting.FileSystemObject").OpenTextFile(UserPath+"\otchet.log").ReadAll

Dim o_Mess, v_Conf
v_Conf = "http://schemas.microsoft.com/cdo/configuration/"
Set o_Mess = CreateObject("CDO.Message")
With o_Mess
.To = "secret.abc@yandex.ru" 'куда отправляем
.From = "Иван Иванов <secret.abc@yandex.ru>" 'имя отправителя + Email
.Subject = "Subj" 'Тема письма

.TextBody =Text

.AddAttachment "C:\help\1.txt" 'Прикрепить файл
.TextBodyPart.Charset = "windows-1251" 'русская кодировка
With .Configuration.Fields
.Item(v_Conf & "sendusing") = 2 'без использования каталога Server Exchange
.Item(v_Conf & "smtpserver") = "smtp.yandex.ru" 'Адрес SMTP-сервера
.Item(v_Conf & "smtpauthenticate") = 1 'Тип авторизации
.Item(v_Conf & "sendusername") = "secret.abc" 'здесь имя пользователя без @
.Item(v_Conf & "sendpassword") = "password" 'пароль
.Item(v_Conf & "smtpserverport") = 465 'порт (альтернативный - 465)
.Item(v_Conf & "smtpusessl") = False 'использовать ли шифрованое подключение SSL
.Item(v_Conf & "smtpconnectiontimeout") = 60 'Время до завершения повторных попыток подключения
.Update
End With
.send
End With
Set o_Mess = Nothing

Вроде работает, НО ищет почему-то у меня только файлы с латинскими именами, т.е. файл "отчет.log" не находит почему-то, зато файл "otchet.log" нормально находит и читает, НО возможно это только у меня глюк, попробуй...Отдыхай!!!
 
Автор темы Похожие темы Форум Ответы Дата
Khack Другие языки программирования 6
Верх Низ