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

» Программирование "удобняшек" на VBScript

Автор: Rush
Дата сообщения: 18.04.2010 22:26
mityamitya

Цитата:
Тоесть они скопировали текст между ключевыми словами. А сами ключевые слова не скопировал ни первый, ни второй скрипт. А мне необходимо получить не только содержимое между ними, но и скопировать сами ключевые слова, с которых начинается поиск.

Не представляю, как это могло быть.
Первый скрипт ОБЯЗАН скопировать вместе с тэгами. У меня такое впечатление, что ты оба раза запускал второй скрипт.

Код: option explicit

dim logfile, outfile, fso, txtfile, txt

logfile = "c:\mylog.log"
outfile = "c:\mylog_out.log"

set fso = createobject("scripting.filesystemobject")

set txtfile = fso.opentextfile(logfile)
txt = txtfile.readall
txtfile.close

set txtfile = fso.opentextfile(outfile, 2, true)
txtfile.write formextract(txt)
txtfile.close

function formextract(text)
dim txtext, pos, pos2
do while instr(text, "<form action=") > 0
pos = instr(text, "<form action=")
pos2 = instr(text, "</form>") + 7
if instr(mid(text, pos, pos2 - pos), "name=""beon[question]""") then
txtext = txtext & mid(text, pos, pos2 - pos) & vbcrlf
end if
text = mid(text, pos2)
loop
formextract = txtext
end function
Автор: mityamitya
Дата сообщения: 18.04.2010 22:53
Ураааа !!!! Все заработало !!!! Rush крутой програмист. Большой ему поклон и многая лета !
Автор: Hugo121
Дата сообщения: 19.04.2010 08:19
Я подумал, что эти теги будут в одной строке, на это мой скрипт и рассчитан. Но раз в Вашем тексте такого не встречается, то он ничего и не нашёл...
Автор: quakerock
Дата сообщения: 19.04.2010 15:30
to Alefandr
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Либо хотябы скрипт чтобы просто мог прочитать текстовый файл и выдавал сообщение с содержимым файла!!!
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile("C:\Log.txt") ' Путь к файлу и имя файла
Set TextStream = File.OpenAsTextStream(1)
MsgBox TextStream.ReadAll()
TextStream.Close
Автор: mityamitya
Дата сообщения: 21.04.2010 22:22
Странно как то работает скрипт от Rush.
Он нашел из 30 значений только 8. То есть нашел первое, осталные пропустил, а затем обработал последние 7. Я вначале не мог понять почему так происходит. А затем поексперементировав обнаружил, что скрипт прекращает поиск если в документе натыкается на пустое место. Я имею ввиду не пробел. В текстовом редакторе Notepad++ v5.4.3 это место отображается как NULL. А в хекс редакторе стоят два нуля. Вот после этого "пустого места" скрипт прекращает поиск, хотя дальше может быть гора текста с искомыми значениями. Наверное он думает что документ закончился.
Как решить такую проблему ?
Автор: kapiton1
Дата сообщения: 22.04.2010 09:08
Здравствуйте.
Компьютеры входят а AD организации, есть задача, с помощью VBS или WMI узнать, в какие локальные и доменные группы входит текущий пользователь на компе (нужно для подстановки в bginfo). Или хотя бы однозначно узнать, есть ли у текущего пользователя права администратора на машине (слышал, что с Вистами здесь есть проблема).
Автор: Rush
Дата сообщения: 22.04.2010 13:48
mityamitya

Цитата:
Странно как то работает скрипт от Rush.

Это не скрипт странный, а просто у тебя файл не текстового формата (с нулевыми байтами).
Поэтому FSO и не читает после них инфу - он предназначен для работы с текстом.
А телепатом я, к сожалению, не являюсь. Нужно или задачу полнее описывать, или пример файла, с которым надо работать, давать. Ферштейн?
Держи:

Код: option explicit

dim logfile, outfile, txt, stream

logfile = "c:\mylog.log"
outfile = "c:\mylog_out.log"

set stream = createobject("adodb.stream")
stream.type = 2
stream.charset = "windows-1251"

stream.open()
stream.loadfromfile(logfile)
txt = stream.readtext
stream.close

stream.open()
stream.writetext formextract(txt)
stream.savetofile outfile, 2
stream.close

function formextract(text)
dim txtext, pos, pos2
do while instr(text, "name=""beon[question]""") > 0
pos = instr(text, "<form action=")
pos2 = instr(text, "</form>") + 7
if instr(mid(text, pos, pos2 - pos), "name=""beon[question]""") then
txtext = txtext & mid(text, pos, pos2 - pos) & vbcrlf
end if
text = mid(text, pos2)
loop
if len(txtext) then txtext = left(txtext, len(txtext) - 2)
formextract = txtext
end function
Автор: mityamitya
Дата сообщения: 22.04.2010 16:03
Спасибо БОЛЬШОЕ за терпение ко мне -- Rush. Последний вариант скрипта работает без отказов и так, как мне надо.
Дело в том, что я впервые в жызни столкнулся с обработкой лог файла. Поэтому проблемы приходилось решать по мере их возникновения. Я даже не знал о таких тонкостях обработки лог файла. Сам был удивлен. Без вашей помощи я бы не смог решить такую задачу.
Ну и последний вопросик, если можно. Как в текстовом файле превратить нулевые байты, например, в пробелы. Или вообще их удалить ? Это так, вопрос на будущее. Может когдато мне пригодится в хозяйстве.
Автор: Rush
Дата сообщения: 22.04.2010 16:18
mityamitya

Цитата:
Как в текстовом файле превратить нулевые байты, например, в пробелы.


Код: txt = replace(txt, chr(0), chr(32))
Автор: dima99999
Дата сообщения: 23.04.2010 20:48
Помогите пожалуйста.

Задача:
Вариант 1 - запустить приложение, найти название окна данного приложения и переименовать в произвольный вид.
Вариант 2 - просто переименовать заранее заданное название окна (в скрипте) в произвольный вид


Возможно ли это выполнить средствами vbs (или иными средствами встроенными в windows)

Если не сложно напишите пожалуйста пример. (для варианта 1 и 2)
Заранее спасибо.
Автор: Hugo121
Дата сообщения: 24.04.2010 12:43
AutoIt (Но в Вин правда не встроено, зато и первое, и второе):

Код: Run(@WindowsDir & "\Notepad.exe", "", @SW_MAXIMIZE)
Sleep(500)
WinSetTitle("Безымянный", "", "My New Notepad")
Автор: dima99999
Дата сообщения: 24.04.2010 13:00
интересуют только встроенные средства начинающиеся от win XP SP2
Если это в принципе возможно встроенными средствами.
Автор: mityamitya
Дата сообщения: 26.04.2010 22:36
Я конечно извиняюсь, но я не понял что делать с этим кодом, написаным Rush на мой вопрос о замене нулевых байтов в текстовом файле. Его надо вписать в основной скрипт "dim logfile, outfile, txt, stream" ? Или его можно запустить отдельным файлом ? Я его запускал отдельным файлом, ничего не произошло. Я туда вписал только txt = replace(txt, chr(0), chr(32)). Может нужны дополнительные команды ?
Автор: Hugo121
Дата сообщения: 27.04.2010 09:14
Вот сюда, между stream.close и stream.open()


Код: txt = stream.readtext
stream.close

txt = replace(txt, chr(0), chr(32))

stream.open()
stream.writetext formextract(txt)
Автор: evsand
Дата сообщения: 27.04.2010 10:30
Нужна помощь специалистов!!! Я в создании скриптов полный ноль. Директор дал задание: на определенных компьютерах делать поиск новых файлов (созданных например за 2-3 дня) и складывать их в папку. Как можно это сделать средствами VBS?
Автор: student24
Дата сообщения: 29.04.2010 11:56
niichavo

Цитата:
VBS2EXE - утилита для компиляции vbs и js скриптов в exe выдранная из пакета PrimalScript


Привет! Не знаешь где найти декомпилятор VBS2EXE? Очень нужен!!!
Автор: vlth
Дата сообщения: 30.04.2010 00:55
evsand

Код: Option Explicit
Dim fso, objShell, objFolder, NotFirst, flag

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "Выбор начальной папки поиска", &H1, 17)
If Not objFolder Is Nothing Then
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFolder = fso.GetFolder(objFolder.Self.path)
On Error Resume Next
fso.CreateFolder objFolder.path & "\" & Date
On Error GoTo 0
SearchAndMoveFiles objFolder, objFolder.path & "\" & Date
Else: wsh.Quit
End If

If flag Then
MsgBox "Новые файлы перемещены в '" & objFolder.path & "\" & Date & "\" & "'"
Else
MsgBox "Новые файлы не найдены"
End If

Set fso = Nothing
Set objFolder = Nothing
Set objShell = Nothing

Function SearchAndMoveFiles(fld, T_path)
Dim objSubFolder, objFile, DaysQ

If Not NotFirst Then
DaysQ = InputBox("Для поиска файлов введите кол-во дней," & vbCrLf _
& "предшествующих сегодняшнему.", , 3)
If DaysQ = "" Then wsh.Quit ' Завершение без сообщения
If Not IsNumeric(DaysQ) Or DaysQ = 0 Or DaysQ > 5 Then wsh.Quit ' Завершение без сообщения
End If

For Each objFile In fld.Files
If (Now - objFile.DateLastModified) < DaysQ + 1 Then
If T_path <> fld.path Then
objFile.Move T_path & "\"
flag = True
End If
End If
Next
NotFirst = True
For Each objSubFolder In fld.SubFolders
SearchAndMoveFiles objSubFolder, T_path
Next
Set objSubFolder = Nothing
Set objFile = Nothing
End Function
Автор: anton04
Дата сообщения: 30.04.2010 10:15
Форумчане помогите решить задачу с помощью vbs скрипта:

необходимо в при запуске ПК (до логина пользователя, т.е. когда обрабатывается GPO ПК) выполнение несложного vbs скрипта который делает следующее:

1. мапит диск \\server\script
2. выполняет определённую команду или запускает файл (exe)
3. отключает диск
единственное что ещё хотелось бы предусмотреть это возможность недоступности сервера по пути и в этом случае просто завершения работы скрипта без создания лог файла с ошибкой.

Я даже более чем уверен что что-то подобное уже реализовывалось, поделитесь кодом.

P.S. Само собой что данный скрипт выполняется в сети домена.
P.P.S. Скрипт должен быть совместим, т.е. выполняться на Windows XP/Vista/7/2008/2008R2.
P.P.P.S. Поиск в Интернете дал только код для решения отдельных элементов задачи, а решение задачи в целом не нашёл.
Автор: evsand
Дата сообщения: 30.04.2010 14:29
vlth
Спасибо за помощь.
Ругается, выдает ошибку: Разрешение отклонено. Мне надо чтобы не было диалога и поиск выполнялся сразу по всему компу по определенному разрешению. Чтоб я задал нужное мне разрешение в скрипте и где нить в папке (можно на компе, можно по сети) все эти новые файлы сложились
Автор: vlth
Дата сообщения: 30.04.2010 17:57
evsand

Цитата:
Ругается, выдает ошибку: Разрешение отклонено.

Подробнее можно? Что за разрешение?


Цитата:
Мне надо чтобы не было диалога и поиск выполнялся сразу по всему компу по определенному разрешению

А здесь что за "разрешение"? - первое и это - одно и то же?


Цитата:
Мне надо чтобы не было диалога и поиск выполнялся сразу по всему компу по определенному разрешению. Чтоб я задал нужное мне разрешение в скрипте и где нить в папке

1. Не лучшая идея: у Вас все новые файлы, включая системные, будут перемещены. Понимаете последствия? К тому же это будет о-о-очень не быстро.
2. Последнее "разрешение" - это что? Что значит "задать его в скрипте"?
Автор: kae08
Дата сообщения: 02.05.2010 23:06
Помогите, пожалуйста! Пишу «удобняшку» для одной задачи, в процессе исполнения
скрипта открываю несколько окон Explorer'а, в определенный момент необходимо все
окна закрыть. Нашел в примерах такой код:

Код: [no]'Закрытие всех окон Explorer'а
Set objShellApp = CreateObject("Shell.Application")
Set objShellWin = objShellApp.Windows
MsgBox "Окон Explorer'а всего - " & objShellWin.Count
For i=0 To objShellWin.Count-1
objShellWin.Item(i).Quit
Next
[/no]
Автор: Hugo121
Дата сообщения: 03.05.2010 15:12
Может надо делать так же, как и с удалением строк/колонок в Excel:

Код: For i=objShellWin.Count-1 To 0 Step -1
objShellWin.Item(i).Quit
Next
Автор: kae08
Дата сообщения: 03.05.2010 18:22
Hugo121, СПАСИБО!
Все отлично работает!
Автор: evsand
Дата сообщения: 04.05.2010 08:55
vlth
Первое разрешение это в ошибке. Строка 36 символ 1 Ошибка: Разрешение отклонено

А второе разрешение - это например *.wav.
Автор: Hugo121
Дата сообщения: 04.05.2010 10:23
Расширение...
Автор: vlth
Дата сообщения: 04.05.2010 13:49
evsand

Код: 36: For Each objFile In fld.Files
37: If (Now - objFile.DateLastModified) < DaysQ + 1 And _
38:         LCase(fso.GetExtensionName(bjFile)) = "wav" Then
Автор: GRom_V
Дата сообщения: 05.05.2010 08:30
Подскажите!!! оч надо!
Есть прога. мне ее надо запустить, и в окошке вбить текст. Чтоб это сделать нужно активировать окно, чтоб оно поверх всех окон было. Название экзешника - прога. Название окна - окно Делаю так:

set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:\папка\прога.exe"
WScript.Sleep 4000
WshShell.AppActivate "окно"
\\сдесь вбивается текст

Но если после запуска открыть другое окно любой программы, то все прахом. Как заставить нужное окно находится на поверхности? WshShell.AppActivate "окно" чет не катит...
Автор: evsand
Дата сообщения: 05.05.2010 15:05
vlth
Прошу прощения что ввел в заблуждение

Проверил, все работает, тока файлы не копирует а перемещает. А с ошибкой я думаю разберусь.

Большое спасибо за помощь.
Автор: vlth
Дата сообщения: 05.05.2010 15:56
evsand, ну как просили: разве "сложить" - это в данном случае не синоним "переместить"?

Тогда замените
Код: objFile.Move T_path & "\"
Автор: obbnd
Дата сообщения: 10.05.2010 22:24
Помогите пожалуйста, если не сложно, со скриптом.
Должно происходить следущее:
1. Скачивается файл http://torstat.xenobite.eu/ip_list_all.php/Tor_ip_list_ALL.csv
Содержимое файла представляет собой список ip адресов в столбик:
12.161.212.22
18.18.6.194
18.42.3.252
...
2. Этот список необходимо сделать таким:
12-161-212-22/12.161.212.22
18-18-6-194/18.18.6.194
18-42-3-252/18.42.3.252
...
3. И сохранить как текстовый файл с расширением txt

Заранее спасибо.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

Предыдущая тема: Работа в Delphi c CryptoApi


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