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

Тема в разделе "Другие языки программирования", создана пользователем UserOK, 27 дек 2015.

↑ ↓
  1. UserOK Уважаемый пользователь
    UserOK
    Ответить в чате

    Форумчанин

    Регистрация:
    04.11.2014
    Сообщения:
    221
    Симпатии:
    299
    Пол:
    Мужской
    Репа:
    +348 / 5 / -0
    Подскажите,пожалуйста,как прикрутить использование переменных сред типа %Userprofile% , %TempDir% и пр в VBS вместо постоянного пути в выделенной строке.
    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 = 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%")
    а вместе Не въехал!!!слепить не получается Как об стену !!!
     
  2. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.812
    Симпатии:
    432
    Пол:
    Мужской
    Репа:
    +966 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    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 = CreateObject("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"

    Можно конечно по разному делать...Отдыхай!!!
     
    • Мне нравится Мне нравится x 2
  3. UserOK Уважаемый пользователь
    UserOK
    Ответить в чате

    Форумчанин

    Регистрация:
    04.11.2014
    Сообщения:
    221
    Симпатии:
    299
    Пол:
    Мужской
    Репа:
    +348 / 5 / -0
    Можно,когда знаешь как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 = "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 = 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
     
  4. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.812
    Симпатии:
    432
    Пол:
    Мужской
    Репа:
    +966 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    А что конкретно не работает ?

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

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

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

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

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.812
    Симпатии:
    432
    Пол:
    Мужской
    Репа:
    +966 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Вот тут точно ошибка:

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

    Код:
    Set objFolderItem = objFolder.Self
    .TextBody = CreateObject("Scripting.FileSystemObject").OpenTextFile(objFolderItem.Path + "\отчет.log")
    VBS плохо знаю, но по логике - Это правильней, либо что-то такого нужно будет сделать...
     
  6. UserOK Уважаемый пользователь
    UserOK
    Ответить в чате

    Форумчанин

    Регистрация:
    04.11.2014
    Сообщения:
    221
    Симпатии:
    299
    Пол:
    Мужской
    Репа:
    +348 / 5 / -0
    Именно здесь косяк.А так скрипт отрабатывает нормально.
    С предложенным вариантом ошибка "несоответствие типа TextBody"
     
  7. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.812
    Симпатии:
    432
    Пол:
    Мужской
    Репа:
    +966 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    А может дело в файле отчет.log, в указанной мной есть ошибка, не нужна палка "\", т.е. нужно просто "отчет.log", если не заработает, то можно попробовать так (Обязательно с палкой):
    Код:
    .TextBody = CreateObject("Scripting.FileSystemObject").OpenTextFile(objFolderItem.Path & "\отчет.log")
     
  8. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.812
    Симпатии:
    432
    Пол:
    Мужской
    Репа:
    +966 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Хотя может конструкция срабатывает верно, но данные в отчет.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"...
     
  9. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.812
    Симпатии:
    432
    Пол:
    Мужской
    Репа:
    +966 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Так ради интереса глянул и переделал конструкцию так:

    Код:
    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" нормально находит и читает, НО возможно это только у меня глюк, попробуй...Отдыхай!!!
     
    • Мне нравится Мне нравится x 2
  10. UserOK Уважаемый пользователь
    UserOK
    Ответить в чате

    Форумчанин

    Регистрация:
    04.11.2014
    Сообщения:
    221
    Симпатии:
    299
    Пол:
    Мужской
    Репа:
    +348 / 5 / -0
    X-Shar, sm181818sm582398247 крайний вариант работает cool cool,даже с кириллицей.Спасибо on ke1fir
     

Поделиться этой страницей