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

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

Автор: Fantom 14
Дата сообщения: 26.01.2010 12:28
Читать 70 страниц времени нету, да и найти решение на свой вопрос внятного и понятного не могу. Подскажите, есть ли аналог функции msgbox, чтобы окно закрывалось через заданное количество секунд (минут,часов)?

PS в VBS я нуб...
Автор: Hugo121
Дата сообщения: 26.01.2010 13:40
WSH - MsgBox(prompt[, buttons][, title][, helpfile, context])
AutoIt - MsgBox ( flag, "title", "text", [timeout] )
Пример
MsgBox(0, "AutoIt", "Для продолжения работы нажмите OK, либо ожидайте автоматического продолжения работы спустя 10 секунд", 10)

Автор: Fantom 14
Дата сообщения: 26.01.2010 15:53
Hugo121
не работает,
Ошибка выполнения Microsoft VBScript: недопустимый вызов или аргумент процедуры: MsgBox
Автор: Hugo121
Дата сообщения: 26.01.2010 16:36
Так тож для AutoIt..
Тут рядом Ссылка
Автор: igor_andreev
Дата сообщения: 26.01.2010 17:21
Fantom 14
Для VBS:

Код:
CreateObject("WScript.Shell").Popup "Это окно закроется через 5 секунд",5,"oops", 64
Автор: eheadz
Дата сообщения: 26.01.2010 23:00
Hugo121

Цитата:
Вам надо архивировать, если есть файл? Почему тогда не так:

Да, спасибо!
Я новичок, до такого простого варианта и не догадался

(удалено: сам разобрался)


Автор: velvetfox
Дата сообщения: 01.02.2010 13:45
Знатоки, помогите.
Вот скрипт, посредством которого содержимое папки a1 копируется
в папки b1 и c1 с заменой уже существующих там файлов

Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFolder "C:\a\a1" , "D:\b\b1" , TRUE
objFSO.CopyFolder "C:\a\a1" , "D:\c\c1" , TRUE

После копирования необходимо сравнить содержимое исходной
папки с содержимым конечных папок и если файлы не совпадают -
выводится сообщение "ошибка", если совпадают - "копирование успешно"
Как это реализовать?
Автор: SerBUser
Дата сообщения: 02.02.2010 08:49
Опять вопрос по работе с AD. В интерфейсе IADsGroup есть метод IsMember() — этот метод позволяет проверить, является ли объект Active Directory членом данной группы и в зависимости от этого возвращает True или False. Учитывается только непосредственное членство: если, например, объект пользователя входит в глобальную группу, которая в свою очередь входит в локальную, то проверка членства для пользователя в локальной группе вернет False. Проверка может быть произведена только для объектов того же домена. Точно так же, как и метод Add(), метод IsMember() принимает в качестве параметра путь AdsPath или SID объекта, членство которого в группе проверяется (для провайдера WinNT проверка по SID не поддерживается).
Вопрос, соответственно, в следующем - а как все-таки проверить - если пользователь входит в глобальную группу домена Domen1, а эта глобальная группа входит в локальную группу домена Domen2 - входит ли пользователь из домена1 в локальную группу домена 2?
Автор: vlth
Дата сообщения: 02.02.2010 09:06
velvetfox

Цитата:
После копирования необходимо сравнить содержимое исходной
папки с содержимым конечных папок и если файлы не совпадают...
Файлы папок в Вашей ситуации могут отличаться, по-моему, в тех случаях, если:

—Не найдена исходная папка и работа скрипта завершилась ошибкой;
—в папке назначения на момент копирования находится большее кол-во файлов, чем в исходной.

Вас не устраивают подобные варианты? - тогда проверка папок на идентичность содержимого бессмысленна: нужно решать вопросы другими способами.
Автор: velvetfox
Дата сообщения: 02.02.2010 09:39
vlth
Спасибо за ответ.
Количество файлов и их типы в исходной папке и в конечных
всегда одинаковое - меняется только их размер.
Предположим, возникает ошибка во время копирования - сбой системы, вирус и т.п. -
вот для этого и нужна проверка.
Может быть я излишне перестраховываюсь, но мне важно быть уверенным,
что инфа скопирована без ошибок.
Автор: vlth
Дата сообщения: 02.02.2010 10:47
velvetfox

Цитата:
Может быть я излишне перестраховываюсь

Так и есть

Код: Option Explicit
Dim objFSO

Set objFSO = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
objFSO.CopyFolder "C:\a\a1" , "D:\b\b1" , TRUE
objFSO.CopyFolder "C:\a\a1" , "D:\c\c1" , TRUE

If Err<>0 Then
    MsgBox "Произошла ошибка: " & Err.Description,vbCritical
Else
    MsgBox "Копирование завершено успешно",vbInformation
End If

'On Error GoTo 0 'Отменяем игнорирование ошибок ("On Error Resume Next") в случае продолжения кода скрипта далее
Автор: velvetfox
Дата сообщения: 02.02.2010 16:43
vlth
спасибо
Автор: vlth
Дата сообщения: 04.02.2010 11:37
Hugo121

Цитата:
Так про замену ExeScript никто ничего не знает?

Здесь и оптимизатор, и компилятор...

Добавлено:
Сейчас проверил: я использовал этот компилятор 7 лет назад... Вроде всё нормально тогда проходило. Только потом почему-то на PrimalScript перешёл...

Добавлено:
До кучи (с того же ресурса)
http://www.freeware.ru/program_prog_id_4273.html
Автор: Pacho
Дата сообщения: 07.02.2010 21:52
Hugo121

Цитата:
Помогите разделить один бинарный файл на два.

Посмотри тут: VBScript & CMD: Разделение файла на фрагменты и их последующее слияние
Автор: Hugo121
Дата сообщения: 08.02.2010 08:33
Pacho
спасибо, пока обхожусь разделением текстовика на другом зтапе работы.
Этот пример не совсем подходит, мне надо анализировать содержание определённых байтов блока, и в зависимости от этого раскидывать блоки на два файла. Например, если в определённом месте байты означают "0212" (не смотрел пока, как это в бинарном виде), то этот блок в 1024 байта пишем в один файл, все остальные блоки по 1024 пишем в другой.
vlth
ScriptCOM тоже не совсем то, синтаксис хоть и похож, но на 100% не совместим, т.е. нельзя компилировать уже готовые скрипты. Да и денег хотят. Тогда уж мне проще на AutoIt скрипт написать...
Автор: vlth
Дата сообщения: 08.02.2010 14:48

Цитата:
т.е. нельзя компилировать уже готовые скрипты
Я компилировал. Проблем не было.

Цитата:
Да и денег хотят.
Пункт в тексте лицензии
Цитата:
а) Вы можете использовать программу в ознакомительных целях не более 30 дней с момента
инсталляции. По прошествии 30-дневного срока пользователь обязан либо зарегистрировать программу путем приобретения лицензии, либо прекратить ею пользоваться и удалить как саму программу, так и её резервные копии, равно как и дистрибутив, а также скрипты и исполняемые
EXE файлы, полученные с помощью программы ScriptCOM
предполагает, что вы добропорядочный гражданин ))) Т.е. после истечения 30-дней ScriptCOM ведёт себя как и прежде, насколько я помню. К тому же, ресурса автора (он был на "народе") больше не существует...

Автор: Pacho
Дата сообщения: 08.02.2010 19:27
Как проще оформить такую конструкцию?

Код: If Условие Then
Call Функция1
Call Функция2
Else
Call Функция, аналогичная Функции1, но внутрь оператора If вставлена ещё пара действий
Call Функция, аналогичная Функции2, но с изменённой Функцией1 (см. выше)
End If

Sub Функция1
For
If условие2 Then
...
End If
Next
End Sub

Sub Функция2
For
Call Функция1
Call Функция2
Next
End Sub
Автор: vlth
Дата сообщения: 09.02.2010 14:52

Цитата:
Как получить код символа в двоичной системе?


Используем функцию Asc(), затем смотрим
http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/Data/325.mspx (Листинг 7), наверное...
Автор: crotoff
Дата сообщения: 11.02.2010 10:35
Очень нужны 2 скрипта (или батника). Один из них ищет в текущем каталоге рекурсивно файлы с опр. расширениями (это переименованные zipы, маски задаются на входе или берутся из файла-списка), распаковывает их в одноимённые папки и удаляет зипы после распаковки. Второй осуществляет обратные преобразования (приводит всё какбэ к первоначальному виду) - упаковывает 7zip'ом содержимое папок с опр. расширениями в zipы, перемещает зипы на уровень вверх, удаляет распакованные папки со всем содержимым, переименовывает zipы обратно (удаляет расширение)
Сейчас есть батники для распаковки и выдачи списка:
[more]
enumer.cmd:
set enum_types=*.docx;*.xlsx;*.xlsm;*.xlsb;*.pptx
if not -%1==- set enum_types=%1
for /r %%f in (%enum_types%) do call %0\..\repacker.cmd "%%f"

repacker.cmd:
move %1 %1.zip
md %1
7z x %1.zip -o%1 -r
del %1.zip
echo %1 >>lst.txt
[/more]
Автор: bygamer
Дата сообщения: 12.02.2010 12:03
crotoff
Рекурсивный проход по папкам/подпапкам

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objFolder = objFSO.GetFolder(strFolder)
Set colFiles = objFolder.Files
For Each objFile In colFiles
File = objFile.Path
Next

ShowSubFolders(objFolder)

Sub ShowSubFolders(objFolder)
Set colFolders = objFolder.SubFolders
For Each objSubFolder In colFolders
Set colFiles = objSubFolder.Files
For Each objFile In colFiles
        File = objFile.Path
Next
ShowSubFolders(objSubFolder)
Next
End Sub
Автор: crotoff
Дата сообщения: 12.02.2010 13:49
bygamer
а где в скрипте входы/выходы? То есть где задать маски для поиска. Или хотя бы как подсунуть скрипту файл-список (в котором файлы с полными путями) для последовательных операций с каждым элементом списка?
Автор: bygamer
Дата сообщения: 12.02.2010 14:52
crotoff
Рекурсивный проход по папкам и проверка на совпадение с переданным расширением.
Что делать с найденнами файлами и прикрутить список расширений сможешь сам...

Dim strFolder, setmask, File, objFSO, objFolder

strFolder = WScript.Arguments.Item(0) 'папка c которой начинать сканирование
setmask = WScript.Arguments.Item(1) ' маска в формате ".3"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strFolder)
Set colFiles = objFolder.Files
For Each objFile In colFiles
File = objFile.ShortName
if Right(File,4) = setmask Then
Doit File
End if
Next

ShowSubFolders(objFolder)
Sub ShowSubFolders(objFolder)
Set colFolders = objFolder.SubFolders
For Each objSubFolder In colFolders
Set colFiles = objSubFolder.Files
For Each objFile In colFiles
        File = objFile.ShortName
            if Right(File,4) = setmask Then
            Doit File
            End if
Next
ShowSubFolders(objSubFolder)
Next
End Sub

Function Doit(File)
WScript.Echo "Тут делаем что там надо с файлами"
End Function
Автор: crotoff
Дата сообщения: 12.02.2010 21:00
bygamer
выдаёт ошибку
и ещё такой вопрос - как адаптировать скрипт для рекурсивного поиска не файлов по маске, а одноимённых подпапок для обработки их функцией Doit ?
Автор: Bad_BoY
Дата сообщения: 13.02.2010 14:48
Подскажите как написать на VBS:
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell_run="winrar.exe a ***.rar 123.txt" & var_pcNr
WSHShell.Run(WSHShell_run)

Вместо звезд, сегодняшняю дату.
Автор: niichavo
Дата сообщения: 13.02.2010 19:19
Bad_BoY

Код: Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell_run="winrar.exe a " & date & ".rar 123.txt" & var_pcNr
WSHShell.Run(WSHShell_run)
Автор: GRom_V
Дата сообщения: 15.02.2010 02:45
подскажите как сделать можно?: Вообщем надо ввести стакую команду:
#I0000062B,1,#S31=7,0,0,128,129,255,255,255,255,255,''Alarm''

Делаю так:
WshShell.SendKeys "#I0000062B,1,#S31=7,0,0,128,129,255,255,255,255,255,"Alarm"{ENTER}"
Ругается... на кавычки "Alarm" - а ввести нужно именно с кавычками. Как написать?
Автор: Pacho
Дата сообщения: 15.02.2010 07:33
crotoff

Цитата:
выдаёт ошибку

Запускать надо: Скрипт.vbs Папка Маска_файла

GRom_V
WshShell.SendKeys "#I0000062B,1,#S31=7,0,0,128,129,255,255,255,255,255,""Alarm""{ENTER}"
Автор: bygamer
Дата сообщения: 15.02.2010 08:35
crotoff

Цитата:
выдаёт ошибку

Запускать надо с аргументами
cscript.exe script.vbs %folder% %mask%
или не передавать аргументом, а забить в скрипт


Цитата:
и ещё такой вопрос - как адаптировать скрипт для рекурсивного поиска не файлов по маске, а одноимённых подпапок для обработки их функцией Doit ?

Дописать

Цитата:
Set colFolders = objFolder.SubFolders
For Each objSubFolder In colFolders

If objSubFolder = нужная папка
Doit objSubFolder


GRom_V
кавычки можно заменить на & ch(34) &

Цитата:
WshShell.SendKeys "#I0000062B,1,#S31=7,0,0,128,129,255,255,255,255,255," & ch(34) & "Alarm" & ch(34) & "{ENTER}"

Автор: GRom_V
Дата сообщения: 15.02.2010 08:52
Pacho
Спасибо...
Еще вопросик - можноЛи как нить в Вин7 запустить, скриптом например, прогу от имени админа. Смысл в том чтоб пароль админа не давать?
Автор: bygamer
Дата сообщения: 15.02.2010 09:35
GRom_V
"runas" в 7ке отменили?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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