Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование "удобняшек" на VBScript (Часть 2)

Автор: litestayer
Дата сообщения: 14.11.2011 16:21
Сам "текст" разбирать не надо. Его нужно брать целиком.
Под блоком иеется ввиду строка "Объект ..." и текст под ним (для каждого объекта свой текст).
Например, надо отобрать объекты 2 и 10 из общего отчета.
Результирующий отчет должен быть:

Объект 2
Текст

Объект 10
Текст
Автор: AndVGri
Дата сообщения: 15.11.2011 01:13
litestayer
Понятнее не стало Вот пример, как определить есть ли в строке входного файла признак объекта

Код:
Option Explicit
Dim pExp

Set pExp = New RegExp
pExp.Global = True
pExp.IgnoreCase = True
pExp.Pattern = "Объект [0-9]+"

If pExp.Test("Объект 23") Then
WScript.Echo "Строка с объектом"
Else
WScript.Echo "Строка данных объекта"
End If
Автор: litestayer
Дата сообщения: 15.11.2011 19:10
AndVGri,

Спасибо, что уделяете мне время. Но как же правильно сформулировать?
Попробую еще так. Например в файле ниже надо оставить только 2 и 4 объекты.
Содержимое файла до обработки:
----------
Объект 1
абон 1
абон 2
итого 2

Объект 2
абон 1
итого 1

Объект 3
абон 1
итого 1

Объект 4
абон 1
итого 1

Содержимое файла после обработки:
-----------
Объект 2
абон 1
итого 1

Объект 4
абон 1
итого 1
Автор: kvazimodolsd
Дата сообщения: 15.11.2011 19:24
AndVGri,
Я litestayer, форум почему-то перестал меня впускать(:, зашел под другим ником.
Спасибо, что уделяете мне время. Но как же правильно сформулировать?
Попробую еще так. Например в файле ниже надо оставить только 2 и 4 объекты.
Содержимое файла до обработки:
----------
Объект 1
абон 1
абон 2
итого 2

Объект 2
абон 1
итого 1

Объект 3
абон 1
итого 1

Объект 4
абон 1
итого 1

Содержимое файла после обработки:
-----------
Объект 2
абон 1
итого 1

Объект 4
абон 1
итого 1
Автор: AndVGri
Дата сообщения: 19.11.2011 06:08
litestayer
Извиняюсь, из-за сбоя на форуме не заметил пути и имена входного и выходного файла поменяйте

Код:
Option Explicit
Const ForReading = 1
Dim fso, inStream, outStream
Dim sLine, sKey, isWrite
Set fso = CreateObject("Scripting.FileSystemObject")
Set inStream = fso.OpenTextFile("c:\temp\inobj.txt", ForReading)
Set outStream = fso.CreateTextFile("c:\temp\outobj.txt", True)
isWrite = False
Do Until inStream.AtEndOfStream
sLine = inStream.ReadLine
sKey = LCase(Trim(sLine))
If (sKey = "объект 2") Or (sKey = "объект 4") Then
isWrite = True
ElseIf InStr(sKey, "объект") > 0 Then
isWrite = False
End If
If isWrite Then
outStream.WriteLine(sLine)
End If
Loop
inStream.Close: outStream.Close
Автор: bobojon
Дата сообщения: 21.11.2011 13:27
Ребята, понадобилась ваша помощь!
Так как я в этом деле совсем уж чайник, прошу Вас помочь мне сделать очень легкий (думаю) для Вас скрипт.
Вот что у меня есть:

var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run("E:\eksperiment\da\Google.exe",0);

после запуска появляется следующая ошибка: The system cannot find the file speciefied

А нужно всего лишь запустить файл (Google.exe)!
Заранее благодарен!
Автор: AndVGri
Дата сообщения: 21.11.2011 14:33
bobojon
\ в java начало управляющего символа (если не ошибаюсь), попробуй заменить на \\
"E:\\eksperiment\\da\\Google.exe
Автор: megamozg13
Дата сообщения: 21.11.2011 14:50
bobojon
и попутно проверить нет ли русских символов...
Автор: ComradG
Дата сообщения: 21.11.2011 17:29
bobojon

Код: ("WScript.Shell").Run("e:\\exksperiment\\da\\google.exe")
Автор: Scaramanga
Дата сообщения: 01.12.2011 09:24
Доброго времени суток. Задача следующего характера.

Нужно чтобы скрипт постоянно отслеживал доступность одного из ПК (невидимо для пользователя). Если Пк доступен (пингуется, пусть будет 192.168.1.1.) то на рабочем столе создается несколько ярлыков ярлык на определенные файлы (пусть c:\1.exe, c:\2.exe и т.п.),если ПК не доступен то этот ярлык удаляется, и снова ожидается доступность ПК

Заранее спасибо за помошь
Автор: ComradG
Дата сообщения: 01.12.2011 10:39
Scaramanga
на какие именно файлы должны создаваться ярлыки? или это военная тайна, которую ты и при самых страшных пытках не откроешь?! чай телепатия и третий глаз нам не присущи, поэтому я могу лишь показать, как пинговать хост с указанным айпишником и метод создания ярлыка, - воедино то, наверное, уж сможешь все собрать самостоятельно. итак, пинг хоста по айпишнику:
Код: strTarget = "192.168.1.1" 'запихиваем наш айпи в переменную типа string

Set WSHShell = CreateObject("WScript.Shell") 'получаем ссылку на системный шелл
Set objExec = WSHShell.Exec("ping -n 5 -w 1000 " & strTarget) 'собственно пинг айпишника

... 'далее код по обстоятельствам
Автор: Scaramanga
Дата сообщения: 01.12.2011 11:11
ComradG
Да нет тайны никакой нет.
ярлык создается на файлы x:\photoshop.exe x:\corel.exe


Цитата:
далее код по обстоятельствам


На этом то и затык. Как пропинговать сервак и создать ярлык по частям я уже нашел, а вот как все это собрать в проект который описал выше, с моими знаниями vbs, проблематично
Автор: AndVGri
Дата сообщения: 02.12.2011 06:20
Scaramanga

Код:
Option Explicit
Const sHost = "192.168.1.1"
Const appPath = "\pathToCorel\"
Const CorelLink = "Corel.lnk"
Dim objShell, objShortCut, sPath, fso

Set objShell = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")

sPath = objShell.SpecialFolders("Desktop") & "\"
If fso.FileExists(sPath & CorelLink) Then fso.DeleteFile(sPath & CorelLink)
If Avaible(sHost) Then
Set objShortCut = objShell.CreateShortcut(sPath & CorelLink)
objShortCut.TargetPath = "\\" & sHost & appPath & "CorelDRW.exe"
objShortCut.Description = "Corel application"
objShortCut.Save
End If

Function Avaible(thisComp) 'пингом проверяет доступность компьютера name в сети
    Dim objPing, objStatus, bResult
On Error Resume Next

bResult = False
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_PingStatus where address = '" & thisComp & "'")
For Each objStatus in objPing
If Not (IsNull(objStatus.StatusCode) Or objStatus.StatusCode <> 0) Then
    bResult = True: Exit For
End If
Next
Avaible = bResult
End Function
Автор: Scaramanga
Дата сообщения: 02.12.2011 07:42
AndVGri
Скрипт срабатывает, но только в момент запуска. Т.е. запустили он выполнил свою работу и благополучно выключился. Мне же нужно чтобы он все время висел в процессах и мониторил доступность сервера выполняя нужные перемещения ярлыка в случае доступности\недоступности последнего
Автор: megamozg13
Дата сообщения: 02.12.2011 07:48
Scaramanga
ну заключи всё тело скрипта в бесконечный цикл и используй слип.

do{
-тело скрипта-
WScript.Sleep(60000);
} while(true);

и кстати зачем было городить пинг, если тебе достаточно проверить существования файла:

var fso=new ActiveXObject("Scripting.FileSystemObject");
do{
if (fso.FileExists(-файл на сервере-)) {-делаем ярлык-} else {-удаляем ярлык-};
WScript.Sleep(60000);
} while(true);




Автор: Scaramanga
Дата сообщения: 02.12.2011 08:16
Пингуется wifi устройство которое лежит в ящике стола. Отключение устройства должно убрать ярлыки с рабочих столов пользователей на "нужное" ПО
Автор: megamozg13
Дата сообщения: 02.12.2011 08:34
тогда ярлыки мало удалять, еще закрывать активные процессы нужно, и компы в ребут запускать =)
Автор: Scaramanga
Дата сообщения: 02.12.2011 08:37

Цитата:
ну заключи всё тело скрипта в бесконечный цикл и используй слип.
 
do{
  -тело скрипта-
  WScript.Sleep(60000);
} while(true);

Можешь полный текст скрипта дать? Выдает все время ошибку о недопустимом знаке(
Автор: AndVGri
Дата сообщения: 02.12.2011 08:42
то javascript

Код:
Do
'-----
Loop While True
Автор: atomheart
Дата сообщения: 07.12.2011 21:12
Здравствуйте.
Есть одна программка для пульта ДУ - uICE. В ней есть возможность запускать скрипты JScript, VBscript. Хочу воспроизвести системный звук "звёздочка". В сети нашёл такой

Код:
Private Sub Form_Load()
Call MessageBeep(MB_ICONASTERISK)
End Sub
Автор: AndVGri
Дата сообщения: 08.12.2011 04:52
atomheart
А остальное, что нашёл?

Цитата:
Form_Load

В VBScript форм нет, написано, скорее всего, для VBA или VB6, там же (в тексте, где выдерал) есть и определение константы MB_ICONASTERISK и определение процедуры MessageBeep

Цитата:
Скрипт исполняется без ошибок

Без ошибок, потому что ничего и не делает
Если бы не ленился и искал, хотя бы "vbscrip воспроизведение звука", то нашёл бы что-то вроде этого
[more=с Серого форума]

Код:
Set WMPlayer = New WMPlayerClass

Dim FilePath

'/// Так же можно указать URl - ссылку на файл в интернете
FilePath = "C:\WINDOWS\Media\chimes.wav"

'/// Открываем ресурс
WMPlayer.OpenMedia FilePath

'/// Выводим длительность файла
msgbox "Длительность файла: " & WMPlayer.CurrentMedia.DurationString,vbInformation,"WMPlayerClass"

'/// проверка изменения громкости
msgbox "Сейчас будет произведена проверка изменения громкости звука. Эффект эхо. 100% 50% 10%"
WMPlayer.Settings.Volume = 100
WMPlayer.Play
WMPlayer.Settings.Volume = 50
WMPlayer.Play
WMPlayer.Settings.Volume = 10
WMPlayer.Play

'/// проверка изменения баланса
MsgBox "Сейчас будет произведена проверка баланса. (левого и правого динамика)",vbInformation,"WMPlayerClass"
WMPlayer.Settings.Volume = 100
WMPlayer.Settings.Balance = -100
WMPlayer.Play
WMPlayer.Settings.Balance = 100
WMPlayer.Play

MsgBox "Проверка завершена.",vbInformation,"WMPlayerClass"

'/// Класс проигрывателя
Class WMPlayerClass
'/// Переменная для хранения ссылки на объект плеера
Dim WMPlayer
Private Sub Class_Initialize()
Set WMPlayer = CreateObject("WMPlayer.OCX")
WMPlayer.settings.autoStart = False
WMPlayer.settings.enableErrorDialogs = False
End Sub

'/// Свойство возвращает ссылку на объект настроек плеера
Public Property Get Settings
Set Settings = WMPlayer.Settings
End Property

'/// Метод подключения к ресурсу
Function OpenMedia(URL)
'/// Несколько из констант состояния открытия
Const wmposMediaLoading = 11
Const wmposMediaLocating = 9
Const wmposPlaylistOpenNoMedia = 6
Const wmposMediaOpen = 13
Const wmposPlaylistOpening = 5
Const wmposOpeningUnknownURL = 21
Const wmposUndefined = 0

'/// Для корректного получения данных о содержимом, нужно открыть ресурс.
WMPlayer.URL = URL
'/// Убираем звук
WMPlayer.settings.mute=true
'/// Запускаем на проигрывание
WMPlayer.controls.Play
'/// Ждём состояния открытия файла. Если файл открыть не удалось вернётся wmposPlaylistOpenNoMedia
Do
WScript.Sleep 10
Loop Until WMPlayer.OpenState = wmposMediaOpen or WMPlayer.OpenState=wmposPlaylistOpenNoMedia
'/// Останавливаем проигрывание
WMPlayer.controls.Stop
'/// Возвращаем звук
WMPlayer.settings.mute=false
End Function

'/// Свойство возвращает ссылку на параметры открытого файла
Public Property Get CurrentMedia
Set CurrentMedia = WMPlayer.CurrentMedia
End Property

'/// Метод запуска проигрывания
Function Play()
WMPlayer.Controls.Play
'/// Ожидаем окончания проигрывания (ждём пока плеер не перейдёт в состояние остановки)
Do
WScript.Sleep 100
Loop Until WMPlayer.playState = 1
End Function
End Class
Автор: atomheart
Дата сообщения: 08.12.2011 15:35
AndVGri
В данном случае я не ленивый, просто плохо искал. Серый форум - то, что нужно, спасибо. Для себя нашёл

Код:
Set oVoice = CreateObject("SAPI.SpVoice")
Set oSpFileStream = CreateObject("SAPI.SpFileStream")
oSpFileStream.Open "c:\Windows\Media\tada.wav"
oVoice.SpeakStream oSpFileStream
oSpFileStream.Close
Автор: ComradG
Дата сообщения: 08.12.2011 20:19
atomheart, AndVGri
вы чего? все гораздо проще делается, без всяких SAPI:
Код: Set objShell = CreateObject("WScript.Shell")

strSound = "C:\WINDOWS\Media\tada.wav"
strCommand = "sndrec32 /play /close " & Chr(34) & strSound & Chr(34)

objShell.Run strCommand, 0, False
Автор: atomheart
Дата сообщения: 09.12.2011 15:01
ComradG
Спасибо, так тоже работает, но с SAPI, субъективно, быстрее. На Сером есть похожий код через пакетный файл:

Код:
sndrec32 /embedding /play /close "C:\Windows\Media\Notify.wav"
Автор: ComradG
Дата сообщения: 11.12.2011 11:03
atomheart
чай дело хозяйское, но насчет быстроты SAPI - зависит от степени захламленности тачки, раз, нагруженности процессора в настоящий момент, два. но это так, к слову.
Автор: mavritonec
Дата сообщения: 15.12.2011 06:20
Люди помогите со скриптом, нужно что бы он допустим конкретный файл 123.xml, переименовал расширение на 123.txt... или ткните носом где уже это было. Буду очень вам благодарен !
Автор: ComradG
Дата сообщения: 15.12.2011 10:01
mavritonec

Код: Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.MoveFile("123.xml", "123.txt")
Автор: Scaramanga
Дата сообщения: 16.12.2011 14:34
День добрый. Задача следующая. Нужен скрипт который в silent режиме произведет поиск в реестре указанного значения и удалить все ключи\разделы\параметры содержавшие данное значение. Для примера пусть значение для поиска будет "test" Заранее спасибо
Автор: lion shadow
Дата сообщения: 16.12.2011 15:00
Здравствуйте кто-нибудь.)
Я с языками программирования в общем не очень знаком, разве что Turbo Pascal 7.0 или VBA чуть-чуть знаю.
Пару дней назад я узнал о существовании vbscrept-а и файлов *.vbs, создал пару приколов типо с мигающей клавиатурой, понял как копировать, создавать файлы, как запускать exe или другие *.vba, чуть понял msgbox..
Мне как-то понравился этот язык, хотелось бы узнать основы и про циклы и массивы и метки. Надо какую-нибудь супер простую книжку с подробными простыми примерами скачать и чтобы на русском языке, а то не пойму.. Посоветуйте что-нибудь.
Я пытался что-то найти, но похоже нормально искать я не умею.)
Автор: megamozg13
Дата сообщения: 16.12.2011 15:19
lion shadow
Gunter Born "Microsoft Windows Script Host 2.0 Developer's Guide" - есть и на русском.
А. Попов, Е. Шикин "Администрирование Windows с помощью WMI и WMIC".

а вообще гуглим мануалы по яве "jsdoc.exe", вбс "vbsdoc.exe" и движку "wshdoc.exe" и в качестве примеров Microsoft "Script Center".

(мануалы могу в обменник закинуть http://rghost.ru/35030571)

Страницы: 12345678910111213141516171819202122232425

Предыдущая тема: Помогите новичку в C++


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.