Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопросы, задачи и их решения по VBScript.

 
Мануал (english, 600 Кб). | Зеркало
MS Scripting 5.6 (700 КБ), включает последнюю версию VBS. Владельцам XP/2000(?) должен быть не нужен. | Зеркало
Немного на wikiпедии.
Предыдущие части: 1
 
Смежные темы:
Сценарии Windows
Командная строка, батники\сценарии (bat, cmd)
Скрипты KiXtart

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:12 12-07-2011 | Исправлено: Smitis, 23:28 26-02-2018
Rush

Уже за тридцать...
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
зацикленный скрипт запуска и закрытия программы  

без WMI:

Код:
Option Explicit
 
Dim objShell, objExec
 
Set objShell = CreateObject("WScript.Shell")  
 
RunCalc
 
Sub RunCalc
  Set objExec = objShell.Exec("calc")
  WScript.Sleep 60000
  objExec.Terminate
  Set objExec = Nothing
  RunCalc
End Sub

Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 12:35 24-06-2017
SaDim

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите, пожалуйста, изменить VBScript под следующую задачу.
Есть для Oper-ы такой Savehtml.vbs - позволяет сохранить открытую страничку в HTML c изображениями при нажатии "Ctrl+S".
Возможно но ли чтобы сначала создавалось директория (с именем HTML-ки) а в неё уже сохранялась HTML c изображениями?

Код:
' Позволяет сохранить открытую страничку в HTML c изображениями при нажатии "Ctrl+S".
' Save As HTML after pressure "Ctrl+S".
' Lex1.
' /////////////////////////////////////////////////////////////////
'
DIM Wsh
Set Wsh = WScript.CreateObject("WScript.Shell")
WScript.Sleep 200
Wsh.SendKeys "{tab}{right}{home}{down}{enter}{tab}"
Set Wsh = nothing
WScript.Quit

Всего записей: 200 | Зарегистр. 02-03-2003 | Отправлено: 15:53 29-06-2017
AVanti473



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые форумчане! Во второй части одного замечательного FAQ, в пункте Q88-2, есть пример следующего скрипта:
 

Код:
Function OnFirstParentStart
Origin = GetEnvironmentVariable("TS_ORIGIN")
LastSlash = InStrRev(Origin, "\")
sSource = Left(Origin, LastSlash) + "PhotoLine19.01_Plugins"
sDestination = ExpandPath("%ProgramFilesDir%\PhotoLine\Defaults\Plugins\")
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Not objFSO.FolderExists(sSource) Then
objFSO.CreateFolder sSource
End If
Set fld = objFSO.getfolder(sSource)
For Each f In fld.files
If objFSO.FileExists(sDestination & f.Name) Then
objFSO.DeleteFile sDestination & f.Name
End If
objFSO.MoveFile f.Path, sDestination & f.Name
Next
End Function

 
Этот скрипт копирует файлы из определённой папки в виртуальную среду портабельного контейнера ThinApp. И он работает, но лишь тогда, когда портабельная сборка стартует с системного диска. Если же портабельную сборку запускать с любого другого диска, увы, всегда выходит следующая ошибка.
 

Код:
---------------------------
Script Error
---------------------------
Source: (null)
Description: (null)
File: (null)
Line 14, Character 0
at:  
---------------------------
ОК    
---------------------------

 
И дело тут не в определении относительного пути по ExpandPath, так как в скриптах других назначений, этот метод отрабатывает отлично, откуда бы портабельная сборка не запускалась. Предполагаю, что ошибка может быть в не объявленной переменной "f". Возможно, надо как-то так:
Set f = objFSO.GetFile()
но, что писать в скобках - вопрос? Может быть в скобки поместить переменную "sSource" и ещё что-то после неё... Например, слеш и *.* ... Но, с другой стороны, можно ли в скрипте использовать звёздочки, вместо имён предполагаемых файлов, и как всё это правильно записать?
 
Если не сложно, подскажите пожалуйста в чём тут на самом деле проблема, и как её можно решить? Заранее благодарю!

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 23:49 04-08-2017 | Исправлено: AVanti473, 23:51 04-08-2017
Proshaa

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
переменная объявляется в цикле
For Each f In fld.files  
так что с переменными здесь всё в порядке.
добавьте MsgBox'сы

Код:
Set fld = objFSO.getfolder(sSource)
MsgBox fld
For Each f In fld.files  
MsgBox f.Name

и смотрите разницу. скорей всего, дело в правах доступа.

Всего записей: 3079 | Зарегистр. 10-01-2011 | Отправлено: 12:21 05-08-2017
AVanti473



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
и смотрите разницу

 
добавил, смотрю:
 

Код:
---------------------------
 
---------------------------
F:\My Program\TestFolder
---------------------------
ОК    
---------------------------
 
---------------------------
 
---------------------------
qwerty.txt
---------------------------
ОК    
---------------------------
 
---------------------------
Script Error
---------------------------
Source: (null)
Description: (null)
File: (null)
Line 17, Character 0
at:  
---------------------------
ОК    
---------------------------

 
Конечно же в скрипте папку обозвал "TestFolder", а файлик для перемещения - пустой "qwerty.txt". Всё то же самое. На системном диске - без ошибок. На любом другом - ошибка. Хотя, MsgBox выдаёт правильные пути, что для системного диска, что для других...
Возможно мне просто кажется, но, если бы дело было в правах доступа, на системном диске это скрипт тоже бы не срабатывал, наверное?...

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 13:08 05-08-2017
Proshaa

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Возможно мне просто кажется, но, если бы дело было в правах доступа, на системном диске это скрипт тоже бы не срабатывал, наверное?...

это же легко проверить, запустив скрипт от имени админа

Всего записей: 3079 | Зарегистр. 10-01-2011 | Отправлено: 13:59 05-08-2017
AVanti473



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Proshaa

Цитата:
это же легко проверить, запустив скрипт от имени админа

 
Скрипт, от имени админа? Может быть Вы имеете в виду портабельную сборку со скриптом запустить от имени админа? Да, собственно у меня на машине контроль учётных записей отключён, а единственная - основная учётка - с правами админа. Но для пущей уверенности да, запускал по правой кнопке мыши от имени админа - та же ошибка.
 
Скажите пожалуйста, а у Вас такой скрипт работает в портабельных сборках, если их запускать не с системного диска, при условии что в папке "sSource" будет находится хотя бы один файл?
 
Добавлено:
Proshaa
 
Странно, но в скрипте, похоже, работает не перемещение а КОПИРОВАНИЕ...

Всего записей: 1179 | Зарегистр. 05-04-2011 | Отправлено: 16:18 05-08-2017 | Исправлено: AVanti473, 16:19 05-08-2017
RabbitPGN



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Посоны не пинайте сильно, но у меня есть пара вопросов. Смысл заключается в том, чтобы в вордовском документе настроить автоподставление, ну по типу вписал в самую первую ячейку, и изменения по нужным ячейкам по всему документу применялись и ещё надо сделать выпадающий список в вордовском документе в тех местах где обычно выбирают подписанта или номера.

----------
я вот лет с пяти хакер, у бабушки сервант сломал и набрутил от туда шоколадок, а потом меня забанили на 3 дня от улицы =/
© HukoTuH

Всего записей: 399 | Зарегистр. 18-05-2012 | Отправлено: 16:00 06-09-2017
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Столкнулся со следующей проблемой, Windows 7 x64 Ultimate. Запускаю из-под Администратора (Far Manager, запущенный с правами Администратора):
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists("C:\Users\All Users\Desktop\FastStone Image Viewer.lnk") Then _
   fso.DeleteFile "C:\Users\All Users\Desktop\FastStone Image Viewer.lnk", true
Выдаётся сообщение: "Разрешение отклонено".
Сам Far этот файл удаляет без вопросов. И дело не только в FastStone Image Viewer.lnk - пробовал и другие аналогичные ярлыки (создаются в процессе автоматической установки), та же ошибка. В аттрибутах файла(ов) никаких "реад онли" нет, с правами доступа тоже всё в порядке.
Сам я в Wsh не силён, приведённый мной кусочек часть большого скрипта.
Может, знатоки подскажут какое-либо решение или альтернативу?
Пока склоняюсь к применению каких либо сторонних del/erase, но может есть метод проще?
 
Добавлено:
Хм, попытка открыть (с правами Админа) из меню "Пуск" C:\Users\All Users\Desktop\ приводит к провалу  
Сам я туда Far'ом спокойно захожу, удаляю/перемещаю. Получается, действительно нет доступа. Как обойти сие? Пробовал PsExec.exe (запускал скрипт как:  
%windir%\PsExec.exe -s -i CScript %windir%\Setup\Scripts\скрипт.vbs
выдаёт код завершения "0", т.е. задача не отрабатывается...

Всего записей: 1101 | Зарегистр. 16-01-2013 | Отправлено: 09:46 19-09-2017
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vasyosuol_24
у меня нет такой C:\Users\All Users\Desktop
там только ссылка на C:\Users\Public\Desktop (C:\Users\Public\Public Desktop)

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 10:19 19-09-2017
vasyosuol_24

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tilks

Цитата:
у меня нет такой C:\Users\All Users\Desktop
там только ссылка на C:\Users\Public\Desktop (C:\Users\Public\Public Desktop)

Т.е. это просто ссылка на реальную папку? По-русски говоря, задача невыполнима, потому что не может быть выполнена .
Спасибо, сейчас попробовал - всё удаляет (из C:\Users\Public\Desktop)
Это меня всё Far с панталыку сбил - за удобства платить приходится

Всего записей: 1101 | Зарегистр. 16-01-2013 | Отправлено: 10:29 19-09-2017
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, а как оптимальнее всего автоматизировать процесс создания на сетевой шаре в домене 2012 индивидуальных папок для пользователей, куда доступ будут иметь только они? Скриптом по шедулеру, делать выгрузку из ad, создавать папки и присваивать доступы через icacls или есть какой-то функционал в роли файл-сервера который решает эту проблему?

Всего записей: 1033 | Зарегистр. 30-05-2006 | Отправлено: 07:27 28-10-2017
SantaS



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
 
Я делал это так:
Call objFS.CreateFolder(USER_ROOT_UNC & loginName)
Call WshShell.Run("cacls " & USER_ROOT_UNC & loginName & _  
     " /e /g имя_домена\админы:F",HIDE_WINDOW, WAIT_ON_RETURN)
Call WshShell.Run("cacls " & USER_ROOT_UNC &  loginName & _  
     " /e /g " & userPrincipalName & ":C",HIDE_WINDOW, WAIT_ON_RETURN)

Всего записей: 186 | Зарегистр. 27-02-2006 | Отправлено: 21:50 28-10-2017
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SantaS
А процесс получения имен как реализован? Я думаю сделать по шедулеру опрос и создание, раз в день например.

Всего записей: 1033 | Зарегистр. 30-05-2006 | Отправлено: 09:00 30-10-2017
SantaS



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
 
Я, в свое время, реализовывал HTML форму, для создания нового пользователя, своему help desk.  
Под Ваши задачи подойдет запрос вроде этого:
 
strOU = "DC=domain,DC=com"
 
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
 
objCommand.CommandText = _
  "<LDAP://" & strOU & ">;" & _
  "(&(objectclass=user)(objectcategory=person));" & _
  "UserAccountControl,userPrincipalName,name;subtree"
 
Set objRecordSet = objCommand.Execute
Do Until objRecordSet.EOF
  WScript.Echo objRecordSet.Fields("userPrincipalName").Value
  WScript.Echo objRecordSet.Fields("name").Value
  objRecordSet.MoveNext
Loop
 
objRecordSet.Close
Set objRecordSet = Nothing
Set objCommand = Nothing
objConnection.Close
Set objConnection = Nothing
 
 
P.S. Только живых пользователей:
If Not objRecordSet.Fields("UserAccountControl").Value= 514_
And Not objRecordSet.Fields("UserAccountControl").Value= 66050_

Всего записей: 186 | Зарегистр. 27-02-2006 | Отправлено: 12:53 30-10-2017
Sofy6969

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Используется
Win 7x64
Total Comander 9.12 RC3 64 bit (2017-11-09)
 
    Папка "источник" - которую нужно скопировать.
Располагается - \\Server\e\Total\папка_1\ИСТОЧНИК\
Содержание папки:
- пустые папки (вложенность - 4-6 уровней);
- файлы (различные);
- ссылки (*.lnk);
    Папка "получатель" - папка куда нужно копировать папку "источник" со всем её содержимым.
Располагается - \\Server\e\Total\папка_2\ПОЛУЧАТЕЛЬ\
Содержание папки: - папка пуста;
 
    Состояние панелей:
Левая панель - не активирована - открыта произвольная папка;
Правая панель - активирована - открыта папка "ПОЛУЧАТЕЛЬ";
 
Имена папок, файлов, ссылок используются на русском и английском языках, в именах имеются пробелы и цифры.
 
Рисунок - ссылка
 
Задача
Сделать кнопку, чтобы можно было скопировать папку "ИСТОЧНИК", со всем её содержимым, в папку "ПОЛУЧАТЕЛЬ" при состоянии панелей описанном выше (п. "Состояние панелей")?
 
Пробую сделать скриптом.
 
Выдаёт ошибку: (скрин ошибки - https://prnt.sc/hc69u4)
 Ошибка: Требуется объект: 'ShA.NameSpace(...)';
 Код: 800A01A8;
 
Вопрос.  
 Как исправить ошибку?
 
 
Скрипт
 
Dim WSH : Set WSH = CreateObject("WScript.Shell")  
 
With WSH  
  On Error Resume Next  
  A = .RegRead(R) : If A > 0 Or Err.Number <> 0 Then .RegWrite R, 0, "REG_DWORD"  
  Path = "\\Server\e\Total\папка_1\ИСТОЧНИК"
  If A > 0 Then .RegWrite R, A, "REG_DWORD"  
  On Error Goto 0  
End With  
 
Title = "Копирование файла из буфера обмена"  
If Path = "" Then MsgBox "Буфер обмена не содержит текстовых данных!", 48, Title : WScript.Quit  
Set ShA = CreateObject("Shell.Application")  
With CreateObject("Scripting.FileSystemObject")  
  Set Items = ShA.NameSpace(.GetParentFolderName(Path)).Items  
  ' Set Items = ShA.NameSpace(Path).Items
  ' Set Items = ShA.NameSpace.GetParentFolderName(Path).Items    
  Name = .GetFileName(Path) : Items.Filter 9408, Name  
End With  
If Items.Count Then  
  CD = WSH.CurrentDirectory  
  ShA.NameSpace(CD).CopyHere Items, 280  
  WSH.Run """%COMMANDER_EXE%"" /O /S /A /L=""" & CD & "\" & Name & """"  
Else MsgBox "‘айла " & Path & " не существует!", 48, Title  
End If

Всего записей: 99 | Зарегистр. 09-06-2013 | Отправлено: 22:34 18-11-2017
romby



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую! Требуется узнать полный путь к Subst-диску. Раскопки выдают несколько способов, какой-нибудь надо реализовать на VBS.
 
0) Ошибочный – EnumNetworkDrives:
Код:
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set oDrives = WshNetwork.EnumNetworkDrives
Ошибочный, потому что выдаёт только сетевые диски (X:\: => \\Server\Share).  
Меня же интересуют локальные (Y:\: => C:\Users\user\Documents\Deep\Inside).
 
1) Запуск Subst.exe и парсинг консольного вывода.
 
2) Самый интересный – WinAPI-функция QueryDosDevice (которую Subst.exe вроде как и использует)
 
3) Другие (ваши) варианты.
 
Итак, как получить прямой путь к Subst-диску на VBS?

Всего записей: 1785 | Зарегистр. 09-02-2006 | Отправлено: 18:00 26-11-2017 | Исправлено: romby, 18:38 26-11-2017
romby



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
1) Запуск Subst.exe и парсинг консольного вывода
Как-то примерно так
 
Больше интересует всё же вызов WinAPI QueryDosDevice. Как это делается на VBScript?

Всего записей: 1785 | Зарегистр. 09-02-2006 | Отправлено: 21:03 26-11-2017 | Исправлено: romby, 21:08 26-11-2017
Proshaa

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
romby
есть такая прога VbsEdit рекомендую, там и примеры есть

Всего записей: 3079 | Зарегистр. 10-01-2011 | Отправлено: 22:38 26-11-2017
korosya

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, можно ли с помощью vbscribt включать/отключать языковую панель (language bar) на 7 и старше?  
И второй вопрос.  Можно ли в менять отображение программы в трее (переключать «Скрыть значок и уведомления», «Показать только уведомления», «Показать значок и уведомления».)

Всего записей: 1005 | Зарегистр. 19-07-2003 | Отправлено: 01:52 29-11-2017
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru