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

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

Автор: constant125
Дата сообщения: 06.10.2008 15:48
помогите доработать скрипт.
Скриптом получаю название операционной системы, а далее мне надо запустить файл1 если это семейство vista или файл2 если семейство ХР.
На данном этапе я могу вывести окно с информацией об операционной системе, а как перенаправить вывод я не могу понять.
Автор: ViSiToR
Дата сообщения: 06.10.2008 20:10
constant125 16:48 06-10-2008
Цитата:
как перенаправить вывод я не могу понять

Куда перенаправить? если имеется в виду просто запустить какое то приложение с этими данными, то можно так:


Код: Set oOSSet = GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")

Set WshShell = WScript.CreateObject("WScript.Shell")

For Each oSystem in oOSSet
    os_name = oSystem.Caption
Next

If InStr(1, os_name, "Vista", 1) >= 1 Then
    WshShell.Exec "Файл1.exe """ & os_name & """"
ElseIf InStr(1, os_name, "Windows XP", 1) >= 1 Then
    WshShell.Exec "Файл2.exe """ & os_name & """"
End If
Автор: constant125
Дата сообщения: 07.10.2008 09:30
Да, совершенно верно, Вы правильно меня поняли
Спасибо!


Добавлено:
А можно ещё вопрос?
Как устроить проверку наличия принтера и в соответствии с наличием того или другого выполнять определённые действия (удаление или установка)
Автор: alroy
Дата сообщения: 07.10.2008 13:08
constant125
Объект WshNetwork
Методы
EnumPrinterConnections
Синтаксис:

EnumPrinterConnections

Назначение:

Возвращает коллекцию сетевых принтеров. Нечётные элементы содержат сетевые имена принтеров, чётные - названия локальных портов.

Параметры:

Нет.

Описание:

Без комментариев.

Пример:

Set WshNetwork = CreateObject("WScript.Network")
Set Printers = WshNetwork.EnumPrinterConnections
i = 0
While i <= Printers.Count-1
MsgBox Printers.Item(i) & " - " & Printers.Item(i+1)
i = i+2
Wend


Автор: constant125
Дата сообщения: 07.10.2008 16:34
Спасибо
Автор: lichnik
Дата сообщения: 08.10.2008 17:05
Добрый день. Сталкнулся с такой задачей:
Есть екселевские файлы А, Б и С. В 1-м столбце файла Б необходимо найти (допустим) содежимое первой ячейки файла А и если оно там (в Б) есть , то скопировать всю строку файла Б в С.


Буду очень благодарен. Уже лет 8-мь не имел дел c WbA. Спасибо!
Автор: Flame2000
Дата сообщения: 13.10.2008 08:42
вопрос как сделать вот в этом скрипте чтобы при запуске вместо "__" ставилось текущее время компа

dim a
a = inputbox ("Browse","!")
if a = "__" then
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run("c:\test.txt")
end if


Добавлено:
и еще вопросик как сделать в появившемся окне больше кнопок?

Добавлено:
заранее благодарен
Автор: ViSiToR
Дата сообщения: 13.10.2008 14:20
Flame2000 09:42 13-10-2008
Цитата:
как сделать вот в этом скрипте чтобы при запуске вместо "__" ставилось текущее время компа

Другими словами, как получить текущее системное время?


Код: If a=Time Then
....
End If
Автор: Nikkolo
Дата сообщения: 17.10.2008 07:07
Нужен простейший скрипт, который бы просто открывал определенную ссылку (и всё!).

Думаю засунуть его в z-cron и запускать его с периодичностью в 5 минут. Ссылка - php-код, который записывает в файл IP. (или можно периодичность срабатывания задать в самом скрипте?)
Плз промогите . Нету сил уже искать, хотя понимаю, что задача - простейшая. Уже несколько дней прошло а я ничего не нашел готового.
Автор: Ramilcheq
Дата сообщения: 17.10.2008 09:05
А как можно запустить из скрипта командную строку?
Например, если время 12:00, то шлем сообщение net send 192.168.0.1 obednah
А вообще хочу написать скрипт, который сравнивает свободное место на диске с эталонным и шлет сообщение, если оно меньше эталонного. Проблема осталась только с посылкой сообщения.
Автор: ViSiToR
Дата сообщения: 17.10.2008 09:57
Nikkolo 08:07 17-10-2008
Цитата:
Нужен простейший скрипт, который бы просто открывал определенную ссылку



Код: Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run("тут:/адрес/ссылки")
Автор: Nikkolo
Дата сообщения: 17.10.2008 12:48
Ух ты спасибо.
А sleep не будет грузить комп?

Самое главное - ссылка-то открывается в браузере .
А мне надо чтобы она "открывалась" где-нибудь там в фоне.

Почему.
Дело в том, что по ссылке лежит php-скрипт который _там на сервере_ записывает IP. Мне это нужно чтобы я из любого места мог через интернет IP человека не утруждая его разговорами о том куда зайти и что сказать.

На ХР это решилось легко. Я запустил там nncron и на встроенном языке прописал скриптик, который якобы хочет что-то загрузить состраницы такой-то и подставил туда свой УРЛ (естественно ничего не гружу, но релоад ссылки получается нормально - php-скрипт работает нормально и сервер там прописывает IP зашедшего у себя в отдельный файл).
На Vista nncron не работает.

P.S.
Кстати а как этот скрипт остановить теперь? А то мне комп перезагружать нельзя а скрипт плодит окна IExplorer'a
Автор: garniv
Дата сообщения: 17.10.2008 16:17
Nikkolo
В диспетчере задач заверши wscript.exe
Автор: ViSiToR
Дата сообщения: 17.10.2008 19:25
Nikkolo 13:48 17-10-2008
Цитата:
А sleep не будет грузить комп?

Нет, это как раз и для того чтобы цикл не нагружал процессор.


Цитата:
надо чтобы она "открывалась" где-нибудь там в фоне.

Можно создать объект Internet.Explorer:


Код: iPeriod         = 5
sURL            = "тут://адрес/ссылки/на/скрипт.php"

iTimer             = Timer


While 1
    WScript.Sleep 1000
    
    If (Timer - iTimer) >= (iPeriod * 60) Then
        PeriodExpired_Event()
        iTimer = Timer
    End If
WEnd

Function PeriodExpired_Event()
    IECreate(sURL, 0, 1, 1)
End Function

Function IECreate(sURL, iShow, iWait, iCloseIE)
    Set oIE = WScript.CreateObject("InternetExplorer.Application")
    
    oIE.Visible = iShow
    oIE.Navigate(sURL)
    
    If iWait Then
        While StrComp(oIE.ReadyState, "complete") <> 0 And oIE.ReadyState <> 4
            WScript.Sleep 100
        WEnd
    End If
    
    If iCloseIE Then oIE.Quit
End Function
Автор: piratiK
Дата сообщения: 18.10.2008 01:34
Подскажите возможно ли на VBScript организовать ввод из конслоли?
Если да то как?
Спасибо.
Автор: ViSiToR
Дата сообщения: 18.10.2008 11:39
piratiK 02:34 18-10-2008
Цитата:
возможно ли на VBScript организовать ввод из конслоли?

Разве что только(?) через cmd. А зачем?
Автор: piratiK
Дата сообщения: 18.10.2008 11:52
Скрипт выдает большой вывод в консоль, окно не очень удобно если например вывод надо скопировать, а ввод через inputbox, что немного раздражает потому что надо по нескольку раз вводить какие то данные. Поэтому хотел только с консоли вводить. Кстати вот нашел в инете код который переключает выполнение скрипта всегда в CScript
Dim WshShell
If StrComp(Right(WScript.FullName, 11), "wscript.exe", vbTextCompare) = 0 Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "cscript.exe " & Chr(34) & WScript.ScriptFullName & Chr(34)
WScript.Quit
End If
WScript.Interactive = True
Автор: igor_andreev
Дата сообщения: 18.10.2008 12:53
piratiK
И всегда в cscript и ввод в консоли
http://blog.throbs.net/2005/06/13/My+Code++InputLine+Function+For+WSH++Inputbox+For+CScript.aspx

Добавлено:
Вернее - если сценарий запущен через cscript, то ввод из консоли, если wscript - то ввод в InputBox
Автор: ViSiToR
Дата сообщения: 18.10.2008 13:18
piratiK
Я сразу не понял что требуется... Вот пример работы через консоль:


Код: ReStartInConsoleMode()

WScript.Echo "Are you sure? (YES = 1 / NO = 2)" & vbCRLF

Do While Not WScript.StdIn.AtEndOfLine
    sInput = sInput & WScript.StdIn.Read(1)
Loop

sInput = Replace(sInput, 1, "YES")
sInput = Replace(sInput, 2, "NO")

If StrComp(sInput, "YES", vbTextCompare) = 0 oR StrComp(sInput, "NO", vbTextCompare) = 0 Then
    MsgBox "User answer: " & sInput, 64, "Answer"
Else
    MsgBox "Wrong User answer: " & sInput, 48, "Answer"
End If

Function ReStartInConsoleMode()
    If StrComp(Right(WScript.FullName, 11), "wscript.exe", vbTextCompare) = 0 Then
        Set WshShell = CreateObject("WScript.Shell")
        WshShell.Run "cscript.exe " & Chr(34) & WScript.ScriptFullName & Chr(34)
        WScript.Quit
    End If
    
    WScript.Interactive = True
End Function
Автор: piratiK
Дата сообщения: 18.10.2008 15:53
Спасибо
Буду пробовать

Добавлено:
Все работает. Как раз то что надо!
Вот еще хотел спросить кто в чем хранит исходники?
Автор: Nikkolo
Дата сообщения: 19.10.2008 06:39
ViSiToR
Спасибо за помощь.
Теперь о скрипте - он все равно открывет откна (вкладки) IE.

Я нашел в этой теме ранее скрипт на закачку файла. Порезал его и он работает так как мне надо.
Вот урезанная версия (работает):


Код:
sSource = "http://ссылка"
set oHTTP = CreateObject("Microsoft.XMLHTTP")
oHTTP.open "GET", sSource, False
oHTTP.send
set oHTTP = nothing
Автор: EyeFey
Дата сообщения: 19.10.2008 09:42
Помогите написать скрипт, который бы перезапускал указанную программы при смене IP-адреса (у меня динамический внешний IP, поэтому может меняться чуть ли не 3-4 раза в сутки)
Автор: ViSiToR
Дата сообщения: 19.10.2008 14:31
Nikkolo 07:39 19-10-2008
Цитата:
он все равно открывет откна (вкладки) IE

Попробуй заменить в IECreate(sURL, 0, 1, 1) 0 на False а 1 на True.


Цитата:
Не работает

А так:


Код: Set oHTTP = WScript.CreateObject("Microsoft.XMLHTTP")

iPeriod = 5
sSource = "http://ссылка"

iTimer = Timer

While 1
    WScript.Sleep 1000
    
    If (Timer - iTimer) >= (iPeriod * 60) Then
        oHTTP.open "GET", sSource, False
        oHTTP.send
iTimer = Timer
End If
WEnd
Автор: Igor_V_Mitichev
Дата сообщения: 20.10.2008 11:51
Я в программировании не силен, но может у кого есть готовый скриптик...

Суть вот в чем: требуется пройтись по дереву каталогов и в этом дереве удалить пустые папки (то есть те, в которых нет файлов). Понятное дело, что если в каталоге нет файла, но у него есть нижележащие каталоги, в которых есть файлы, то их удалять не надо.

Уж больно пользователи сетевые шары засоряют. И если с удалением "протухших" файлов я справился посредством bat, то вот с удалением опустевших каталогов как-то пока не знаю чего делать...
Автор: Nikkolo
Дата сообщения: 20.10.2008 11:59
Спасибо.
Из всех вариантов рабочий оказался следующий.


Код:
Set oHTTP = WScript.CreateObject("winhttp.winhttprequest.5.1")

iPeriod = 5
sSource = "http://ссылка.php"

iTimer = Timer

While 1
WScript.Sleep 1000

If (Timer - iTimer) >= (iPeriod * 60) Then
oHTTP.open "GET", sSource, False
oHTTP.send
iTimer = Timer
End If
WEnd
Автор: igor_andreev
Дата сообщения: 20.10.2008 12:09
Igor_V_Mitichev

Цитата:
И если с удалением "протухших" файлов я справился посредством bat,

туда же в батник добавь команду "rmempty \\comp\share"
rmempty.exe тут http://www.otbsw.com/ в архиве rmemp12.zip(36кб)
Автор: ViSiToR
Дата сообщения: 20.10.2008 14:16
Nikkolo 12:59 20-10-2008
Цитата:
Объект "winhttp.winhttprequest.5.1" - присутствует ли в любой, даже "голой" XP и Vista?

Судя по MSDN, поддерживается на Win 2000/Server 2003/XP, но полагаю что и на Vista не прекратили его подержку.


Цитата:
Скрипт вылетает после ухода компа на спящий режим или при отключении-подключении к сети

Что значит вылетает? выдаётся сообщение об ошибке? (какое?).
Автор: Nikkolo
Дата сообщения: 21.10.2008 11:10

Цитата:
но полагаю что и на Vista не прекратили его подержку

На моей Vista 64 - работает, но она никак не "голая".


Цитата:
Что значит вылетает? выдаётся сообщение об ошибке? (какое?).

При уходе на спящий режим пишет, что "Сервер вернул недопустимы или неразспознанный ответ"

При разрыве связи пишет что "Не удается разрешить имя или адрес сервера"

В обоих случаях wscript.exe пропадает из списка процессов. Соответственно после восстановления связи (возврата из спящего режима) проверка ссылки уже не происходит.
Может on error goto... только где? Или проверку соединения?

P.S.(добавлено позже)

вот этот вариант работает и со спящим режимом и с реконнектом (продолжает работать после реконнекта)


Код:
Set oHTTP = WScript.CreateObject("winhttp.winhttprequest.5.1")

iPeriod = 5
sSource = "http://ссылка.php"

iTimer = Timer

While 1
WScript.Sleep 1000

If (Timer - iTimer) >= (iPeriod * 60) Then
on error resume next
oHTTP.open "GET", sSource, False
oHTTP.send
iTimer = Timer
End If
WEnd
Автор: ViSiToR
Дата сообщения: 21.10.2008 19:26
Nikkolo 12:10 21-10-2008
Цитата:
вот этот вариант работает

On Error Resume Next желательно ставить в начале скрипта а не в условии/цикле.
Также можно ещё проверять ошибку перед Send...


Код: oHTTP.open "GET", sSource, False
If Not Error Then oHTTP.send
Автор: monsoon
Дата сообщения: 22.10.2008 13:58
Igor_V_Mitichev

Цитата:
И если с удалением "протухших" файлов я справился посредством bat, то вот с удалением опустевших каталогов как-то пока не знаю чего делать...

немного оффтоп, но c этим батник тоже справляется:

Код: for /D %%a in (*.*) do cd "\%%a" & call :subroutine
goto :eof

:subroutine
dir /s /b /ad | sort /R > c:\tree.txt
for /F %%a in (c:\tree.txt) do rd "%%a"

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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