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

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

Автор: Rush
Дата сообщения: 21.02.2011 14:53
Leon_Ko

Цитата:
Только путь к этой папке (у меня она общая на всех компах) прописан в %Path% - системных переменных. Поэтому нужный мне скрипт (по имени) нетрудно вызвать из любого места и любого раздела.

Вы в %path% прописали папку, в которой надо удалять файлы? И туда же хотите скрипт положить?
Все гораздо проще - можно создать ярлык, в нем прописать нужную комстроку и положить его куда надо. И вызывать из консоли его. Его запуск ничем не отличается от запуска скрипта. И таких ярлыков можно наделать сколько угодно.
Это как вариант пока. Я сейчас отключаюсь, если надобность останется - завтра сделаю.
Автор: Leon_Ko
Дата сообщения: 21.02.2011 15:04
Rush

Цитата:
Вы в %path% прописали папку, в которой надо удалять файлы?

Нет. У меня просто есть набор своих "вкусностей", кои и прописаны в %path%. И скрипт(ы), которые я использую, находятся именно там. А уже вызываются (консольно, через FAR) из любого места.

Цитата:
Все гораздо проще - можно создать ярлык, в нем прописать нужную комстроку и положить его куда надо.

Я не пользую ярлыков . Практически. Ещё со времён ДОС'а. Нет, понятно, что есть определённый набор программ, которые запускать таким образом - просто садомазохизм. Но для конкретных задач, мне нужно именно так, как я описал выше...

Цитата:
И вызывать из консоли его. Его запуск ничем не отличается от запуска скрипта. И таких ярлыков можно наделать сколько угодно.

Это понятно, можно и .bat (виноват, .cmd) - файлов написать для такого случая. Хотя это и достаточно архаично, но работать-то будет. Но хотелось бы всё-таки получить результат более "прямой" форме.

Цитата:
Это как вариант пока. Я сейчас отключаюсь, если надобность останется - завтра сделаю.

Хорошо, я подожду. Заранее спасибо!
Автор: OSADJAN
Дата сообщения: 22.02.2011 01:46
lДоброго здоровья.
В VBS недавно...Вопрос по аргументам. Например:

Код: Option Explicit
Dim i,Arg,objArgs,s
Set objArgs = WScript.Arguments
For Each Arg In objArgs
s=s & Arg & vbCrLf
Next
WScript.Echo s
Автор: Rush
Дата сообщения: 22.02.2011 02:46
Leon_Ko
Мы пришли к тому, с чего начали.

Цитата:
нужно просто запуск delext.vbs и ВСЁ! А уже взависимости от места, из которого вызывается этот самый delext.vbs и будут выполняться требуемые деяния..


Цитата:
А вот место, откуда скрипт запускается, может и видоизменяться в широких пределах - на разных компах буквы разделов и названия папок разные...


Цитата:
Только путь к этой папке (у меня она общая на всех компах) прописан в %Path% - системных переменных. Поэтому нужный мне скрипт (по имени) нетрудно вызвать из любого места и любого раздела.

Может я не понимаю Вашей терминологии? Что такое "место, откуда скрипт запускается"? Запускается - это место, где лежит сам скрипт. Но Вы-то его хотите положить в определенную папку - "путь к этой папке (у меня она общая на всех компах) прописан в %Path%". И в то же время пишете - "место, откуда скрипт запускается, может и видоизменяться в широких пределах".
Вы понимаете, что одно противоречит другому? Или скрипт лежит (и запускается, соответственно) из определенной папки, или в разных местах. Но, в любом случае, ему нужно указать с какой папкой работать. Тут есть только такие возможности:
1) Жестко указать в скрипте путь, где будет происходить удаление.
2) Записывать путь в комстроке.
3) Прописать удаление в папке, куда положен сам скрипт.
4) Записать относительный путь от папки со скриптом. Как пример: подняться на 2 каталога вверх в папку ххх.
5) Скрипт будет искать определенную папку на диске (дисках).
6) Вызывается диалог выбора папки и там выбирается.
Складывается такое ощущение, что Вы вообще не хотите нигде писать папку, в которой скрипт должен удалять. Пусть, мол, сам догадается. Пройдем по пунктам, которые я перечислил:
1) Нет. Потому что на разных компах разные пути.
2) Нет. Потому что писать неохота в комстроке.
3) Нет. Потому что лежать скрипт будет в системной папке.
4) Смотри пункт первый.
5) Не знаю, но чтобы искать папку - ее имя надо написать в скрипте или ввести в комстроке.
6) Не знаю, но раз тяжело писать в комстроке, то и тут лишние телодвижения не приветствуются.
Короче говоря, пока внятно не будет донесена Ваша мысль каким образом хотите узнать расположение папки - я умываю руки. Пока только невнятные обрывки мыслей здесь вижу.
Автор: Leon_Ko
Дата сообщения: 22.02.2011 07:40
Rush

Цитата:
Мы пришли к тому, с чего начали.

Ну, в принципе, да . Я к тому, что 1-й вариант мне был как-то ближе. И если б не ошибка с "недоступными областями" ("System Volume Information"), то практически бы всё устроило.

Цитата:
Может я не понимаю Вашей терминологии?

Наверное, да. Просто я, скорее всего, несколько велеречиво выразился - что поделать, не програмист я .
Наверное, мы действительно друг друга недопоняли.

Цитата:
Вы понимаете, что одно противоречит другому? Или скрипт лежит (и запускается, соответственно) из определенной папки, или в разных местах.

Да, согласен с вами. Уточнимся - скрипт лежит в %Path%. Запускается, наверное, оттуда . Вызывается? Так это будет политкорректно? Вызываться он может с любого места на диске. Так будет понятно?
Цитата:
Тут есть только такие возможности:
1) Жестко указать в скрипте путь, где будет происходить удаление.

Путь(и) каждый раз разные, ибо непредсказуемо, где я буду удалять.

Цитата:
2) Записывать путь в комстроке.

Очень длинно и ненужно, ибо я всё равно "сижу" в FAR'е. Зачем мне каждый раз записывать путь (с кучей параметров), если я всё равно равно нахожусь в этом каталоге? С таким же успехом я могу просто воспользоваться командой erase - результат будет практически тот же самый, и скрипт не нужен. Скрипт как раз нужен для автоматизации (облегчения работы) - запустил (виноват, вызвал) в нужном месте, и скрипт выполнит заранее указанные операции.
3-6 Всё так, вы практически угадали .

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

Абсолютно верно! Именно так оно и есть. Я не шучу. Я действительно не знаю, в какой папке мне надо будет удалять эти файлы. И всё, что я хочу - это автоматизировать процесс.
Непонятно? Конкретный пример. Я скачал альбом (и не один, допустим, целую дискографию каког-либо исполнителя, т.е. ...надцать альбомов) в каком-нибудь lossless формате, допустим, flac. Далее я распаковываю эти flac-и для получения исходных, несжатых образов (.wav), которые необходимы для дальнейшего подмонтажа в виртуальные диски с последующим анализом и тестированием. По завершении работы у меня остаются "кучи" .wav-файлов, которые уже не нужны. И вот их нужно удалить.
Понимаете? Я не знаю, как будет называться следующий альбом, который я скачаю, и не знаю на какой диск и в какую папку я его буду сохранять - зависит от наличия свободного места . Причём комп такой не один - их минимум 2-а: на работе и дома.
Автор: Rush
Дата сообщения: 23.02.2011 03:32
Leon_Ko
Извините, долго не отвечал - не заходил в сеть.
Теперь все понял. Тогда надо вот так:

Код: Option Explicit

On Error Resume Next

Dim strMask: strMask = "*.bak"
Dim strFolderPath:
Dim objFSO
Dim objShApp
Dim objWshSh
Dim check: check = False

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objShApp = WScript.CreateObject("Shell.Application")
Set objWshSh = CreateObject("WScript.Shell")

strFolderPath = objWshSh.CurrentDirectory

If WScript.Arguments.Count = 1 Then strMask = WScript.Arguments.Item(0)

DelFileToFolders objFSO.GetFolder(strFolderPath)

If Err.Number Then
MsgBox "Скрипт отработал с ошибками.", 48, "Удаление файлов"
ElseIf check Then
MsgBox "Файлы " & strMask & " удалены успешно.", 64, "Удаление файлов"
Else
MsgBox "Файлы " & strMask & " не обнаружены.", 64, "Удаление файлов"
End If

WScript.Quit

Sub DelFileToFolders(objFolder)
Dim SubFolderItem
If FilesExist(objFolder.Path) Then
objFSO.DeleteFile objFolder.Path & "\" & strMask, True
check = True
End If
For Each SubFolderItem In objFolder.SubFolders
On Error Resume Next
If FilesExist(SubFolderItem.Path) Then
objFSO.DeleteFile SubFolderItem.Path & "\" & strMask, True
check = True
End If
DelFileToFolders SubFolderItem
Next
End Sub

Function FilesExist(strPath)
Dim arrFiles
Set arrFiles = objShApp.NameSpace(strPath).Items
arrFiles.Filter 64, strMask
FilesExist = CBool(arrFiles.Count)
End Function
Автор: Leon_Ko
Дата сообщения: 23.02.2011 10:10
Rush
Всё работает, большое спасибо!
Автор: ktotama
Дата сообщения: 24.02.2011 22:31

Цитата:
Rush
Всё работает, большое спасибо!

Читаю и не могу врубиться зачем vbs, а почему просто не написать
del /f/s/q *.bak
Автор: Rush
Дата сообщения: 25.02.2011 04:26
ktotama
Если человеку надо, это его дело. Он писал:
Цитата:
С таким же успехом я могу просто воспользоваться командой erase - результат будет практически тот же самый, и скрипт не нужен.
Значит для него смысл есть.
Автор: Free_Soft
Дата сообщения: 25.02.2011 18:49
кто подскажет, можно ли с помощью скрипта вывести на экран картинку (jpeg, png, bmp) в ее оригинальном размере без всяких обрамлений? типа Splash-заставки.
Уже когда-то спрашивал, но решения тогда не нашлось. Сейчас вопрос вновь актуален
Автор: ComradG
Дата сообщения: 26.02.2011 14:40
Free_Soft
в vbs - через виндовый медиаплэйер, но проще всего это реализовать в powershell. однако, подозреваю, что последний не подойдет.
Автор: AndVGri
Дата сообщения: 26.02.2011 15:35
Free_Soft
Если поставить сторонний WindowSystemObject, то можно или (если только стандартно) hta
Автор: ComradG
Дата сообщения: 26.02.2011 19:43
Free_Soft
и все же глянь, может пригодится
Автор: Obake
Дата сообщения: 01.03.2011 15:52
Помогите со VB скриптом, пожалуйста. Скрипты пишу эпизодически, опыта маловато.

Цель: просмотреть определенную подпапку папки Inbox в Outlook'е 2007, для каждого непрочитанного письма проверить наличие в сабже слова myword, скопировать сабж и тело письма в текстовый файл, после чего сделать письмо прочитанным и поставить красный флажок.


Код:
Option Explicit
Dim objOutlook, objFolder, objNamespace, colItems, myFilter
Dim colFilteredItems, objFSO, objTxtFileFolder, objFile, objMessage
Dim olFlagMarked

Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(6).Folders("Just")

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTxtFileFolder = objFSO.GetFolder("c:\temp")
Set objFile = objTxtFileFolder.CreateTextFile("just.txt", True)

Set colItems = objFolder.Items
Set colFilteredItems = colItems.Restrict("[Unread] = True")

For Each objMessage In colFilteredItems

    myFilter = objMessage.Subject

            If InStr(myFilter, "myword") Then

objFile.WriteLine (objMessage.Subject & vbCrLf)
                objFile.WriteLine (objMessage.Body & vbCrLf)

                objMessage.UnRead = False
                objMessage.FlagStatus = olFlagMarked
                objMessage.Save

            End If
Next
Автор: SVOI_CHUVAC
Дата сообщения: 03.03.2011 10:35
Приветствую всех
Появилась интересная задачка. Отправить письмо с помощью скрипта на vbs особой сложности не составляет, а вот как сформировать и отправить сообщение, которое бы у получателя высвечивалось в MS Outlook в виде задачи? Сервер MS Exchange 2003 отсылка по 25-му порту без авторизации открыта
Автор: Free_Soft
Дата сообщения: 05.03.2011 13:24
Можно через vbs-ку получить установленный ключ продукта Windows?

Добавлено:
нашел только на powershell. Может его как то переделать можно?
Автор: ComradG
Дата сообщения: 05.03.2011 15:34
Free_Soft
тебе ID или серийник? и то и то можно сделать на батнике, причем я писал уже об этом кажись здесь. или тебе непременно нужна vbs?
Автор: Free_Soft
Дата сообщения: 05.03.2011 16:25
ComradG
Серийник винды и офиса в идеале
Я просто думал что на батнике не получится
Автор: ComradG
Дата сообщения: 05.03.2011 16:28
Free_Soft
в общем, я так понимаю, батник сойдет?
Автор: Free_Soft
Дата сообщения: 05.03.2011 16:35
ComradG
Сейчас до компа доберусь, ясно станет
Автор: ComradG
Дата сообщения: 05.03.2011 16:50
Free_Soft

Цитата:
нашел только на powershell
если не сложно, то можешь выложить, - хотелось бы посмотреть.
Автор: Free_Soft
Дата сообщения: 05.03.2011 18:19
ComradG
ответил в ПМ
Автор: ComradG
Дата сообщения: 05.03.2011 21:11
Free_Soft
во-первых, спасибо, во-вторых, попробую на днях накатить на vbs все-таки ради спортивного интереса.
Автор: king_stiven
Дата сообщения: 06.03.2011 07:26
значит есть такой скрипт, он пингует адрес turbo.uralcom.com и если пинга нет, перегружает роутер. Значит вот это пингование надо вырезать и оставить только перезагрузку. И ещё, если язык по умолчанию не английский, то не вставляет латиницу, можно обойти?

Код: On Error Resume Next

strComputer = "."
strTarget = "turbo.uralcom.com" 'IP address or hostname
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colPings = objWMIService.ExecQuery _
("Select * From Win32_PingStatus where Address = '" & strTarget & "'")
If Err = 0 Then
Err.Clear
For Each objPing in colPings 'избавиться от форича
If Err = 0 Then
Err.Clear
If objPing.StatusCode = 0 Then
' если статус = 0, пустая строка — другое
Else
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "telnet.exe 192.168.1.1"
WScript.Sleep 1000
oShell.SendKeys "admin" & chr(13)
WScript.Sleep 1000
oShell.SendKeys "admin" & chr(13)
WScript.Sleep 1000
oShell.SendKeys "reboot" & chr(13)
End If
Else
Err.Clear
WScript.Echo "Unable to call Win32_PingStatus on " & strComputer & "."
End If
Next
Else
Err.Clear
WScript.Echo "Unable to call Win32_PingStatus on " & strComputer & "."
End If
Автор: ComradG
Дата сообщения: 06.03.2011 07:56
king_stiven
в чем, собственно, проблема: for each заканчивается ключевым словом next, а перезагрузка в твоем скрипте осуществляется путем посыла хосту команды "reboot"
Код: oShell.SendKeys "reboot" & chr(13)
Автор: king_stiven
Дата сообщения: 06.03.2011 08:46
ComradG
значит вот такой скрипт получается? Проверить не на чем пока.

Код: Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "telnet.exe 192.168.1.1"
WScript.Sleep 1000
oShell.SendKeys "admin" & chr(13)
WScript.Sleep 1000
oShell.SendKeys "admin" & chr(13)
WScript.Sleep 1000
oShell.SendKeys "reboot" & chr(13)
WScript.Quit
Автор: ComradG
Дата сообщения: 06.03.2011 09:24
king_stiven
ты не внимателен:
Код: oShell.Run "telnet.exe 192.168.1.1"
Автор: king_stiven
Дата сообщения: 06.03.2011 10:47

Цитата:
запускает телнет клиент

Так и должно быть, роутер телнет понимает.

Цитата:
потом у тебя два раза дублируется эта строчка.

логин и пароль
проверю только завтра.
Автор: ComradG
Дата сообщения: 06.03.2011 12:29
king_stiven

Цитата:
логин и пароль
извиняй, сразу не понял что к чему (может в примерах на форуме стоит принять за правило для пользователя писать "user", а пароль - "password", так глядишь и легче станет ориентироваться).
Автор: alhellium
Дата сообщения: 08.03.2011 18:14
Немного подправил...Пишет в лог время перезагрузки.
Код: Dim fso, log
do
WScript.Sleep 100000
On Error Resume Next

strComputer = "."
strTarget = "8.8.8.8" 'IP address or hostname
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colPings = objWMIService.ExecQuery _
("Select * From Win32_PingStatus where Address = '" & strTarget & "'")
If Err = 0 Then
Err.Clear
For Each objPing in colPings 'избавиться от форича
If Err = 0 Then
Err.Clear
If objPing.StatusCode = 0 Then
' если статус = 0, пустая строка - другое
Else
        Set fso = CreateObject("Scripting.FileSystemObject")

        If Not fso.FileExists ("d:\RebootModem.log") Then
                Set Log = fso.CreateTextFile ("d:\RebootModem.log")
                Log.WriteLine " Automatic rebooting " & Date & " " & Time
        Else
                Set Log=fso.OpenTextFile ("d:\RebootModem.log",8)
                Log.WriteLine " Automatic rebooting " & Date & " " & Time
        End If
        Log.Close
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.Run "telnet.exe 192.168.1.1"
WScript.Sleep 1000
oShell.SendKeys "admin" & chr(13)
WScript.Sleep 1000
oShell.SendKeys "admin" & chr(13)
WScript.Sleep 1000
oShell.SendKeys "reboot" & chr(13)
WScript.Sleep 100000
End If
Else
Err.Clear
WScript.Echo "Unable to call Win32_PingStatus on " & strComputer & "."
End If
Next
Else
Err.Clear
WScript.Echo "Unable to call Win32_PingStatus on " & strComputer & "."
End If
loop

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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