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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
dandyd

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите хороший файл справки по vbs в формате CHM, который можно подключить к VbsEdit (чтобы по F1 сразу открывалась ссылка на искомое слово).
Лучше на русском.
 
Заранее спасибо за информацию.

Всего записей: 171 | Зарегистр. 22-01-2006 | Отправлено: 09:30 15-07-2018
sundraw

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго всем!
Столкнулся с задачей. Смысл вот в чём. Имеются старые прокси в файле old.txt, имеются новые прокси в new.txt. Новые нужно сравнить со старыми, и если есть совпадение по первым 3-м группам цифр, то в финальном файле fin.txt эти совпадающие не должны появиться. К примеру:
old.txt

Код:
 
195.91.200.164:52407
77.244.20.26:40007
78.36.201.226:54988
91.144.131.58:46384
 

new.txt

Код:
 
195.91.200.2:52407
195.91.200.164:31427
77.244.20.10:43267
81.91.189.113:61718
217.114.187.227:61769
195.135.215.20:36779
 

fin.txt после сверки должен быть таким

Код:
 
81.91.189.113:61718
217.114.187.227:61769
195.135.215.20:36779
 

Всего записей: 837 | Зарегистр. 15-05-2011 | Отправлено: 08:34 19-10-2018 | Исправлено: sundraw, 09:09 19-10-2018
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно что-то, типа этого:

Код:
OldFile = "old.txt"
NewFile = "new.txt"
FinFile = "fin.txt"
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
 
Set Stream = objFSO.OpenTextFile(NewFile)
  arrNew = Split(Stream.ReadAll, vbNewLine)
Stream.Close
 
Set Stream = objFSO.OpenTextFile(OldFile)
  arrOld = Filter(Split(Stream.ReadAll, vbNewLine), ".", True)
Stream.Close
 
For i = 0 To UBound(arrOld)
  arrNew = Filter(arrNew, Left(arrOld(i), InStrRev(arrOld(i), ".")), False)
Next
 
Set Stream = objFSO.OpenTextFile(FinFile, 2, True)
  Stream.Write Join(arrNew, vbNewLine)
Stream.Close
 
WScript.Echo "Done"

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 13:14 21-10-2018 | Исправлено: Rush, 13:22 21-10-2018
sundraw

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Rush
Скрипт работает, большое спасибо!

Всего записей: 837 | Зарегистр. 15-05-2011 | Отправлено: 16:38 21-10-2018
Laserje18

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
Есть постоянно работающий скрипт, чтобы завершить его работу, нужно открыть диспетчер задач и там его завершить.
Как сделать, чтобы скрипт отслеживал одновременное нажатие какой-нибудь комбинации клавиш или какой-нибудь из клавиш F, и после обнаружения нажатия, завершал свою работу?

Всего записей: 64 | Зарегистр. 11-09-2012 | Отправлено: 16:32 26-10-2018
dandyd

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

Цитата:
Есть постоянно работающий скрипт, чтобы завершить его работу, нужно открыть диспетчер задач и там его завершить.  
Как сделать, чтобы скрипт отслеживал одновременное нажатие какой-нибудь комбинации клавиш или какой-нибудь из клавиш F, и после обнаружения нажатия, завершал свою работу?

Можно, наверное, извратиться и в скрипте как-то перехватывать клавиатуру.
 
Т.к. сам скрипт в в процессах не светится, там висит wscript или cscript:
Тупой, но быстрый способ.
1. Из qqq.vbs сделать qqq.exe (если не в курсе как сделать, погуглите)
2. Запустить qqq.exe
3. Создать ярлык на десктопе с командой TASKILL qqq.exe ... (taskill /?)
4. В свойствах ярлыка назначить "Быстый вызов" по сочетанию клавиш
5. По сочетанию клавиш процесс qqq.exe убивается.
 

Всего записей: 171 | Зарегистр. 22-01-2006 | Отправлено: 18:18 26-10-2018 | Исправлено: dandyd, 18:26 26-10-2018
Laserje18

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dandyd
Как-то я не подумал, что можно скомпилировать в exe, согласен, это решение.
Спасибо!

Всего записей: 64 | Зарегистр. 11-09-2012 | Отправлено: 18:52 26-10-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Никак не могу найти нормальное описание работы MSXML2.DomDocument в VBS
 
Если не трудно, покажите пример создания например такого XML в VBS
 
 

Код:
<?xml version="1.0" encoding="UTF-8"?>
<InterfaceSSHConfig xmlns:g="urn:1">
<CHANNEL ChannelNum="3" ChannelName="БМИУ">
 <RTU RTUName="Инвертор 1" RTUNum="1">
  <STATUSES StaDesc="Инвертор1">
   <STATUS StatusPoint="1" StatusName="Связь с инвертором" StatusClass="12"  StatusInvert="+ (да)" StatusImp="2 (сигнал)"/>
   <STATUS StatusPoint="2" StatusName="Повреждение изоляции"  StatusInvert="+ (да)"/>
  <ANALOGS AnaDesc="Инвертор1">
   <ANALOG AnalogPoint="1" AnalogName="Генерация за текущие сутки" AnalogUnits="Мвт*ч"/>
   <ANALOG AnalogPoint="2" AnalogName="Генерация полная" AnalogUnits="МВт*ч"/>
  </ANALOGS>
 </RTU>
 <RTU RTUName="Инвертор2" RTUNum="2">
  <STATUSES StaDesc="Инвертор2">
   <STATUS StatusPoint="1" StatusName="Связь с инвертором"  StatusRetro="-  (нет)" StatusSignal="+ (аварийно-предупредительный)" StatusImp="0 (не записывать)"/>
   <STATUS StatusPoint="2" StatusName="Повреждение изоляции"  StatusRetro="-  (нет)" StatusSignal="+ (аварийно-предупредительный)" StatusImp="0 (не записывать)"/>
  </STATUSES>
  <ANALOGS AnaDesc="Инвертор2">
   <ANALOG AnalogPoint="1" AnalogName="Генерация за текущие сутки" AnalogUnits="МВт*ч"/>
   <ANALOG AnalogPoint="2" AnalogName="Генерация полная" AnalogUnits="МВт*ч"/>
  </ANALOGS>
 </RTU>
</CHANNEL>
</InterfaceSSHConfig>


Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 10:35 22-11-2018 | Исправлено: zhudionis, 11:30 22-11-2018
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, zhudionis
Сложного ничего. Много текста. MSXML3 и MSXML6 разные. Читайте доки.
http://www.script-coding.com/XMLDOMscripts.html
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms757828(v%3Dvs.85)
https://blogs.msdn.microsoft.com/xmlteam/2007/03/12/upgrading-to-msxml-6-0/
Подробнее...

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 18:41 22-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
я Вам благодарен, буду изучать.
Получается все в одну строку, уфффф...... Нужно все из Excel забрать, а там по 20000 строк!!!
Буду текстовыми функциями пользоваться.

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 04:24 23-11-2018 | Исправлено: zhudionis, 04:34 23-11-2018
Proshaa

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zhudionis
а почему не воспользоваться экспортом из экселя в xml?
или, уж если прямой экспорт почему-то не устраивает - написать макрос на VBA? всяко проще...

Всего записей: 3079 | Зарегистр. 10-01-2011 | Отправлено: 04:56 23-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Proshaa
Можно и на VBA, но там не простой экспорт, а признаки наличия атрибутов, пример таблицы
Ссылка
В принципе сделал скрипт через текстовые функции с записью в файл через ADODB.Stream, но подумал, что правильнее будет работать с файлом XML напрямую. В будущем хочу сделать и обратную выгрузку.
P.S. я начинающий, просто пытаюсь автоматизировать рутину
Мой скрипт
Подробнее...

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 07:14 23-11-2018 | Исправлено: zhudionis, 07:25 23-11-2018
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, zhudionis
Сразу два замечания -  
1. Переводы строк не важны
2. Для XML в атрибутах могут использоваться как одинарные так и двойные кавычки.
И строка
TMS = TMS&vbCrLf&"  </ANALOGS>"&vbCrLf&" </RTU>"&vbCrLf&"</CHANNEL>"&vbCrLf&"<CHANNEL ChannelNum="&""""&ChanNum(m)&""""&" ChannelName="&""""&ChanName(m)&""""&">"
становится
TMS = TMS & "</ANALOGS></RTU></CHANNEL><CHANNEL ChannelNum='"& ChanNum(m) &"' ChannelName='" & ChanName(m) &"'>"
 
Я бы делал как-то так : Подробнее...
Можно весь диапазон сразу принять в массив, и потом обращаться aRange(i, cПеременная).

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 08:48 23-11-2018
zhudionis



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

Цитата:
1. Переводы строк не важны  

мне важны, не так же просто я их забацал)), этот файл в такой форме принимается программой
 
за подсказки спасибо - разбираюсь
 
Добавлено:
Alex_Piggy
Set oRange = Range("A2:T2")  
 а как обращаться к Excel?

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 11:08 23-11-2018
Alex_Piggy

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

Цитата:
мне важны, не так же просто я их забацал)), этот файл в такой форме принимается программой  

Тогда перед сохранением примените PrettyXML
 

Цитата:
Set oRange = Range("A2:T2")  
 а как обращаться к Excel?

Как и обращались. Это VBA Excel макрос.
То есть

Код:
 
Set wShell=CreateObject("WScript.Shell")
Set oExec=wShell.Exec("mshta.exe ""about:<input type=file id=FILE><script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>""")
filename = oExec.StdOut.ReadLine
 
set oExcel = CreateObject("Excel.Application")
oExcel.Visible = true
Set oBook = oExcel.Workbooks.Open(fileName)
Set oRange = oBook.Worksheets(1).Range("A2:T2")
 


Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 12:25 23-11-2018 | Исправлено: Alex_Piggy, 18:31 26-11-2018
5peciali5t



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
добрый день!
 
выше рассмотрели пример формирования xml файла из vbs  
тоже предстоит подобная задачка, но опыта почти ноль
 
собираю оболочку, конфигурирующую установку редакций офиса на основе установщика click 2 run
пока это в основном только наброски внешнего вида, будет много чекбоксов и в зависимости от того что активировано/деактивировано должен будет формироваться xml файл конфигурации установки
 
пример xml файла
 
внешний вид
 
оболочка
 
Вопросы:
1.
можно ли привести фрагмент кода который при установленном чекбоксе "ru-RU" запишет в xml файл строку
      <Language ID="ru-RU" />
а при деактивированном (не отмеченном) чекбоксе OneDrive запишет
      <ExcludeApp ID="OneDrive" />
2. если xml файл нужно сложить по кирпичикам из совокупности отмеченных/деактивированных чекбоксов, как организовать вывод в файл, чтобы каждая новая строка дописывалась, а не перезаписывала файл
3. как организовать раскрывающийся список, который при выборе в нем элемента будет менять состав выводимых в поле опций, например, выбрали редакцию proplus под ней отобразились входящие в ее состав приложения, выбрали standard - отобразились входящие в нее (чтобы убрать из интерфейса множество по сути отвлекающих и дублирующихся опций)?
4. можно ли что-то добавить в код скрипта к определенным командам (как якорь в html), чтобы скомпилированному exe файлу можно было передавать параметры установки, конфигурируя ее из командной строки, например
exe /proplus /ru-RU /excludeonedrive /silent
прописало бы в формируемый xml файл соответственно  
    <Product ID="Proplus2019Volume">
      <Language ID="ru-RU" />
      <ExcludeApp ID="OneDrive" />
..
<Display Level="None" AcceptEULA="TRUE" />
 
заранее благодарю за ответы!

Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 10:34 24-11-2018
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, 5peciali5t
К сожалению, Вам сюда - AutoIT (Часть 3)
1.  Несколько лет AutoIT не трогал.  Но как-то так (diff -u к Вашему коду)
2. Не понял. Если MSXML DOM - то в любом случае файл будет перезаписываться. Вы формируете объект, потом сбрасываете его в файл.
3. Динамический интерфейс... Я бы использовал что-то вроде TreeView. Пример. Спрашивайте в теме по AutoIT.
4. Да, можно.

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 15:24 24-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Спасибо! Опыта у Вас.... Короче, круто!
Не могу понять, куда  PrettyXML  в коде добавить.

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 04:43 26-11-2018 | Исправлено: zhudionis, 07:14 26-11-2018
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброе время, zhudionis

Цитата:
Не могу понять, куда  PrettyXML  в коде добавить.

Без него точно не годится/не работает?
К сожалению, я обнаружил что мой код только для MSXML6 работает...  
Думаю, как для MSXML3 сделать. Вечером. Дополню.
Встречал FormatXMLNode - но он для VBA.
Использовать - перед сохранением запустить с DomDocument в качестве аргумента.

Код:
 
Set oXML = CreateObject("MSXML2.DomDocument.6.0")
oXML.load "in.xml"
PrettyXML oXML
oXML.save "out.xml"

 
UPD:
PrettyXML для любой версии MSXML

Всего записей: 1883 | Зарегистр. 07-08-2002 | Отправлено: 08:44 26-11-2018 | Исправлено: Alex_Piggy, 18:29 26-11-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Кстати без него тоже работает, но лично под собственные нужды нужно в читабельном виде.
Иногда правлю этот самый файл в Notepad++.
 

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 09:03 26-11-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 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