Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопросы, задачи и их решения по VBScript.

 
Мануал (english, 600 Кб). | Зеркало
MS Scripting 5.6 (700 КБ), включает последнюю версию VBS. Владельцам XP/2000(?) должен быть не нужен. | Зеркало
Немного на wikiпедии.
Предыдущие части: 1
 
Смежные темы:
Сценарии Windows
Командная строка, батники\сценарии (bat, cmd)
Скрипты KiXtart

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:12 12-07-2011 | Исправлено: Smitis, 23:28 26-02-2018
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kolonium
проверит файл и добавит строки если их нет
 

Код:
 
str= array("строка1","строка2","строка3")
Set fso = CreateObject("Scripting.FileSystemObject")
Set fn = fso.OpenTextFile("111",1)
 
ftxt=fn.ReadAll
fn.close
 
for i=0 to ubound(str)
if instr(ftxt,str(i))=0 then ftxt=ftxt+chr(10)+str(i)
next
Set fn = fso.OpenTextFile("111",2)
fn.Write ftxt
fn.Close
 

Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 12:46 01-10-2012
Skif_off

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
comrades, помогите, пожалуйста, совсем не разбираюсь в vbs, к сожалению:
к foobar2000 прикрутил AuSpec (генерация и просмотр спектрограмм), заменил ACDSee на Imagine.

Код:
Dim WshShell, FSO
Set WshShell = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
 
Call WshShell.Run("foobar2000.exe " & chr(34) & _
        "/runcmd-playlist=Convert/auspec" & chr(34), 1, True)
 
WshShell.Popup "Please press OK when converting is done",, "auSpec waiting for responce ...", 1
 
WshShell.CurrentDirectory = ".\tools\AuSpec\"
Call WshShell.Run("AuSpec_Pre.exe C:\temp\foo_temp\Image.wav", 1, True)
Call WshShell.Run("Imagine.exe C:\temp\foo_temp\Image.wav.png", 1, True)
FSO.GetFolder("C:\temp\foo_temp").Delete

Потом решил, что лучше не использовать абсолютные пути и заменил C:\temp на %Temp%, все работает кроме последней строки, выдает ошибку:
Строка: 13
Символ: 1
Ошибка: Путь не найден
Код: 800A004C
В итоге выполняется все, кроме удаления папки foo_temp. Как правильно передать путь с системной переменной?

Всего записей: 6473 | Зарегистр. 28-01-2008 | Отправлено: 13:28 03-10-2012 | Исправлено: Skif_off, 13:31 03-10-2012
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Как правильно передать путь с системной переменной?

 
ExpandEnvironmentStrings

Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 13:42 03-10-2012
Skif_off

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Black_Lung, спасибо, погуглил, заменил  
FSO.GetFolder("C:\temp\foo_temp").Delete
на
FSO.GetFolder("WshShell.ExpandEnvironmentStrings(%Temp%)" & "\foo_temp").Delete
получаю ту же ошибку - путь не найден. Что делаю не так?
 
Добавлено:
Кажется, разобрался, вот так:
FSO.GetFolder(WshShell.ExpandEnvironmentStrings("%TEMP%\foo_temp")).Delete
вроде работает.
Надеюсь, это первый и последний раз )

Всего записей: 6473 | Зарегистр. 28-01-2008 | Отправлено: 14:54 03-10-2012 | Исправлено: Skif_off, 16:20 03-10-2012
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FSO.GetFolder("WshShell.ExpandEnvironmentStrings(%Temp%)" & "\foo_temp").Delete будет искать "WshShell.ExpandEnvironmentStrings(%Temp%)\foo_temp"
надо так:
FSO.GetFolder(WshShell.ExpandEnvironmentStrings("%Temp%") & "\foo_temp").Delete

Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 16:23 03-10-2012
Skif_off

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Black_Lung, спасибо, исправил.

Всего записей: 6473 | Зарегистр. 28-01-2008 | Отправлено: 16:37 03-10-2012
Kar1son

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите почему это не работает (окно на мгновение появляется и пропадает)

Код:
Set oShell = CreateObject("WScript.Shell")  
oShell.Exec("c:\windows\system32\telnet.exe")

а это работает? (но не подходит мне так как хочу получить ProcessID)

Код:
Set oShell = CreateObject("WScript.Shell")  
oShell.Run "c:\windows\system32\telnet.exe"

Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 11:44 16-10-2012 | Исправлено: Kar1son, 12:34 16-10-2012
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kar1son
Потому что первый пример с ошибкой, скобки ненадо было ставить. Если нужно ProcessID то нужно так:

Код:
set oExec= oShell.Exec("c:\windows\system32\telnet.exe")
 
 
и скобки тогда нужны
 
 

Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 12:25 17-10-2012
Kar1son

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Black_Lung
так тоже не работает. оно не дает ошибку. просто пустое окошко с заголовком "c:\windows\system32\telnet.exe" появляется на мгновение и пропадает. пробовал на двух машинах(обе ХР)

Цитата:
set WshShell = WScript.CreateObject("WScript.Shell")  
set oExec= WshShell.Exec("c:\windows\system32\telnet.exe")

Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 22:47 17-10-2012 | Исправлено: Kar1son, 10:44 18-10-2012
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Таки да, дело не в скобках. Exec не показыает окно консоль
 
 
там написано как получить PID без exec

Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 12:46 18-10-2012 | Исправлено: Black_Lung, 13:06 18-10-2012
Kar1son

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
это глюк или так должно быть. вроде должен показать?
при этом он не просто не показывает. в процессах telnet не появляется
за ссылку спасибо, тот вариант мне подходит. но хотелось бы понять для себя и про Exec

Всего записей: 187 | Зарегистр. 23-08-2006 | Отправлено: 13:00 18-10-2012 | Исправлено: Kar1son, 15:42 18-10-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую.
 
У нас с коллегой начинается тупняк. он на основе примеров создал vbs-скрипт, который при определённых условиях должен слать email. Делает он это через CDO.Message.
Тестим через gmail аккаунт — всё хорошо работает.
Проверяем через корпоративный почтовик — не пашет.
 
В чём суть, глянул логи smtp сервера (у нас настроен postfix с авторизацией через dovecot) — скрипт не авторизуется. Причём тупо даже не пытается, он сразу после приветствия сервера суёт ему "MAIL FROM", вместо "AUTH PLAIN". Все почтовые клиенты нормально работают с нашим почтовым сервером. В т.ч. попробовал отправить письмо через mailx (BSD утилита) и всё норм ушло. Сервер как и положено во всех SMTP-сессиях отдаёт 250-AUTH PLAIN.
 
В чём дело, кто может подсказать? Почему он у gmail авторизуется, а у нас даже не пытается?
Настройки для gmail и для внутреннего почтовика..

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 13:24 19-10-2012
vlary



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Для интереса проверил, у меня все работает без проблем
Отправлял с Висты на КоммуниГейт.
Вот сам скрипт:
Подробнее...
А это дебаг с лога КоммуниГейта:  
Подробнее...

----------
Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

Всего записей: 17278 | Зарегистр. 13-06-2007 | Отправлено: 15:17 19-10-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vlary
Во, вижу сходство с gmail... А можно пробу через 25порт, а не 465?
 
Я, кстати, без дебага перед уходом с работы проверил через свой домашний сервер (там в отличии от работы стоит exim), тоже не сработала авторизация и как следствие Relay not permitted.
TLS хоть и есть возможность и там и там использовать но в силу самоподписности всех почтовых сертификатов (и дома и на работе) всё гонял так в plain по 25порту.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 19:09 19-10-2012
vlary



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd  
Цитата:
А можно пробу через 25 порт, а не 465?
Я подозреваю, что они могли сделать авторизацию исключительно через секурный порт, дабы пароль не ходил открытым текстом. Но проверить раньше понедельника все равно не смогу.


----------
Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

Всего записей: 17278 | Зарегистр. 13-06-2007 | Отправлено: 23:01 19-10-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vlary
Ну на 25 есть STARTTLS, типа всё сукьёрно... Но предположение очень интересное.
А мне раньше понедельника и не надо. Тяпницу я пивом отметил, так что до понедельника о работе не думаем)
 
p.s. Надеюсь что к понедельнику не забудете) Если что я попробую в пон в личку написать.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 23:42 19-10-2012
vlary



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Цитата:
Надеюсь что к понедельнику не забудете)
 Оказывается, я забыл выключить рабочий комп
Поэтому смог проверить прямо сейчас.
Все без проблем отработало и в этот раз.
Поставил 25 порт и вообще убрал ssl

Код:
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = _
False

Вот новый лог с дебагом: Подробнее...

----------
Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

Всего записей: 17278 | Зарегистр. 13-06-2007 | Отправлено: 00:32 20-10-2012 | Исправлено: vlary, 10:47 20-10-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vlary
Ай, у меня дома через 25порт ни чего не послать))) Только принимать... Устроил порочный круг.

Цитата:
auth_advertise_hosts = ${if eq{$tls_cipher}{}{}{*}}
 
.ifndef MAIN_TLS_ADVERTISE_HOSTS
MAIN_TLS_ADVERTISE_HOSTS = ${if eq {$interface_port}{465}{*}{}}
.endif
tls_advertise_hosts = MAIN_TLS_ADVERTISE_HOSTS
без tls'а нельзя авторизовываться, а tls разрешён только на 465 порту)
Ну и еще exim не разрешает plaintext аутентификацию без tls — server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}, закоментить придётся.
 
Когда в понедельник вернусь к тестам, сниму ограничения...

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 11:14 20-10-2012 | Исправлено: Alukardd, 11:30 20-10-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Собственно вот кусок сессии скрипта с моим почтовым сервером, результат такой же как и в случае с корпоративным почтовым сервером. Результат отсутствия авторизации очевиден: 7706 SMTP>> 550 relay not permitted.
 
В чём может быть проблема я хз...

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 12:46 22-10-2012 | Исправлено: Alukardd, 13:01 22-10-2012
NitroPT

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет! Нужна помощь.
Есть такой, скажем шаблон:
 

Код:
 Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '1cv7.exe'")
 
For Each objProcess in colProcesses
    sngProcessTime = (CSng(objProcess.KernelModeTime) + _
            CSng(objProcess.UserModeTime)) / 10000000
    Wscript.Echo objProcess.name & VbTab & sngProcessTime
Next  

 
Он отдает время в режиме ядра + в режиме пользователя. Мне нужно получить текущую загрузку процессора этим процессом (как в диспетчере задач). Когда в диспетчере показывает 0, данный "код" > 0, в зависимости от того, на сколько упорно до этого работала программа.
Цель данного куска кода, не грохать работающий процесс, тоесть дождяться завершения выполнения неких действий в программе и после того, как загрузка стала 0, грохнуть процесс. Теперь более конкретно: по вечерам оставляют на ночь 1с с запущенной процедурой восстановления последовательноти, соответственно архиватор не может получить доступ к файлам и архив получается не полный. Так как нужно и то и то, хотелось бы дождаться загрузки процессора 0 и........ Да собственно не исключено, что это может понадобиться и в каких либо других случаях. Не зависимо от результата, всем заранее спасибо.

Всего записей: 4 | Зарегистр. 15-12-2005 | Отправлено: 14:09 22-10-2012 | Исправлено: NitroPT, 14:17 22-10-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru