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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
a929151



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

Код:
txt="Главный инженер отдела по консолидации и распределению особо важных производственных задач"
Msgbox Replace(txt," ",Chr(13) & Chr(10))
 

коряво. посмотри RegExp может поможет.

Всего записей: 1359 | Зарегистр. 30-03-2016 | Отправлено: 18:29 22-01-2018 | Исправлено: a929151, 18:29 22-01-2018
UltraAcid

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 Привет ребята. Помогите пожалуйста решить задачку. Имеется MS Access форма с скриптом для удаления записей с PostgreSQL базы данных. Таблицы в Access базе просто связанные с PostgreSQL и всё работает.
  Я хочу сделать VBScript по этому коду чтобы он запускался через планировщик в нужное время, сделал работу и не задавал вопросов.
  Мучаюсь уже несколько дней, срок поджимает а результата нету. Дело в том что в базе PostgreSQL таблицы связаны между собой и удалять записи надо в определённом порядке.
  Короче вот скрипт. Наверное не идеален и можно его оптимизировать но он работает:
 
----------------------------------------------------------------------------------------------

Код:
 
Option Compare Database
 
Private Sub Command0_Click()
On Error GoTo Command0_Click_Err
Dim wks As DAO.Workspace
Set wks = DBEngine.Workspaces(0)
Dim SQL As String
Dim SQL2 As String
Dim SQL3 As String
Dim SQL4 As String
Dim SQL5 As String
Dim CurrDate As Date
 
 
wks.BeginTrans
CurrDate = Date
SQL = "DELETE Catalog_Code.*, Catalog_User.rRole " & _
        "FROM Catalog_User INNER JOIN Catalog_Code " & _
        "ON Catalog_User.id = Catalog_Code.rUser " & _
        "WHERE Catalog_User.rRole=5 AND (Format(Catalog_User.Modified, 'yyyy-mm-dd')) <> '" & CurrDate & "' ;"
SQL2 = "DELETE Catalog_UserGroup.*, Catalog_User.rRole " & _
        "FROM Catalog_User INNER JOIN Catalog_UserGroup " & _
        "ON Catalog_User.id = Catalog_UserGroup.rUser " & _
        "WHERE Catalog_User.rRole=5 AND (Format(Catalog_User.Modified, 'yyyy-mm-dd')) <> '" & CurrDate & "' ;"
SQL3 = "DELETE Catalog_UserSetting.*, Catalog_User.rRole " & _
        "FROM Catalog_User INNER JOIN Catalog_UserSetting " & _
        "ON Catalog_User.id = Catalog_UserSetting.rUser " & _
        "WHERE Catalog_User.rRole=5 AND (Format(Catalog_User.Modified, 'yyyy-mm-dd')) <> '" & CurrDate & "' ;"
SQL4 = "DELETE Security_UserRight.*, Catalog_User.rRole " & _
        "FROM Catalog_User INNER JOIN Security_UserRight " & _
        "ON Catalog_User.id = Security_UserRight.rUser " & _
        "WHERE Catalog_User.rRole=5 AND (Format(Catalog_User.Modified, 'yyyy-mm-dd')) <> '" & CurrDate & "' ;"
SQL5 = "DELETE Catalog_User.*, Catalog_User.rRole " & _
       "FROM Catalog_User " & _
        "WHERE Catalog_User.rRole=5 AND (Format(Catalog_User.Modified, 'yyyy-mm-dd')) <> '" & CurrDate & "' ;"
 
 
CurrentDb.Execute SQL, dbFailOnError
CurrentDb.Execute SQL2, dbFailOnError
CurrentDb.Execute SQL3, dbFailOnError
CurrentDb.Execute SQL4, dbFailOnError
CurrentDb.Execute SQL5, dbFailOnError
 
        If IsNull(DLookup("Id", "Common_Queue")) Then
            CurrentDb.Execute "INSERT INTO Common_Queue (Data) SELECT (Data) FROM SyncCode;", dbFailOnError
        End If
 
wks.CommitTrans
 
Command0_Click_Exit:
    wks.Close
    Set wks = Nothing
    Exit Sub
 
Command0_Click_Err:
    MsgBox Error$
    wks.Rollback
    Resume Command0_Click_Exit
 
End Sub
 

-----------------------------------------------------------------------------------------------
 
А здесь начало VBScript`а который работает но он просто удаляет все записи с указанной таблицы (это только для теста подключения):
 
-----------------------------------------------------------------------------------------------

Код:
 
Set conn = CreateObject("ADODB.Connection")
strCnx = "DSN=PostgreSQL35W;"
conn.Open strCnx
 
conn.Execute("Delete FROM ""Catalog"".""Code""")
msgbox "Done"
conn.close
 

-----------------------------------------------------------------------------------------------
 
Подключение к базе PostgreSQL происходит через ODBC драйвер.
Мне не удаётся написать sql запрос с JOIN. Помогите пожалуйста. Спасибо!  

Всего записей: 179 | Зарегистр. 03-10-2005 | Отправлено: 11:24 23-02-2018 | Исправлено: UltraAcid, 11:28 23-02-2018
DenSyo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UltraAcid
работая с линковаными таблицами из акцеса запросы строятся по синтаксису акцеса, через ODBC запросы выполняются сервером к которому подключились. создайте в акцесе запрос к серверу, пропишите в свойствах ODBC подключение и потренируйтесь с запросом на удаление непосредственно на сервере. не уверен, но не факт что в запросе на удаление будет поддерживаться join. в этом случае сначала в запросе с join делайте изменение ключевых полей, update set сработает, затем удаление по этим изменениям.

Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 03:44 26-02-2018
UltraAcid

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DenSyo
 
Спасибо за ответ но я уже замучался полностью пробоя написать правильный синтакс запроса. Постоянно получаю кучу ошибок. Вот и решил написать в форуме. Мой опыт в VBScript очень маленький. В Акцесе всё проще. Выше указанный скрипт тоже собирал не один день... Видимо не судьба мне стать программистом
Поиграюсь ещё денёк другой и тогда будет видно. А то как говорил раньше срок поджимает. Если у кого-нибудь в этом форуме вдруг появится лишняя минутка чтоб помочь с моей проблемкой буду очень благодарен. Верю что для профи в этом деле больше несколько минут и не займёт.
Спасибо.
 
 

Всего записей: 179 | Зарегистр. 03-10-2005 | Отправлено: 18:12 26-02-2018
DenSyo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
UltraAcid
на счет запросов PostgreSQL обратитесь в профильную тему
негде проверить синтаксис постгре и не знаю структуру ваших данных, но что-то похожее на это

Код:
update Catalog_Code set rUser=''
    from Catalog_Code  
    inner join Catalog_User on Catalog_User.id=Catalog_Code.rUser  
    where Catalog_User.rRole=5 and to_timestamp(Catalog_User.Modified, 'yyyy-mm-dd')<>to_char(now(), 'yyyy-mm-dd');
delete from Catalog_Code WHERE rUser='';
delete from Catalog_User WHERE Catalog_User.rRole=5 and to_timestamp(Catalog_User.Modified, 'yyyy-mm-dd')<>to_char(now(), 'yyyy-mm-dd');

Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 03:05 27-02-2018
sniffspb



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет знатокам! Помогите plz перевести bat в VBS...
PS Спасибо за телепатическую подсказку.. Нагуглил уже..

Всего записей: 24 | Зарегистр. 09-05-2007 | Отправлено: 18:18 10-03-2018 | Исправлено: sniffspb, 17:01 11-03-2018
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как проще всего решить проблему аплоада файлов по фтп в винде с контролем результата?
 
Надо регулярно аплоадить небольшие (5-10мб) файлы с бэкапом за сутки, но связь не всегда стабильная (моб. интернет), соответственно иногда может разорваться соединение и аплоад прервется...
 
Соотв. нужен контроль:
1) если в папке бэкапов есть файлы - пингуем 8.8.8.8, если пинг стабильный шаг 2, если не стабильный шаг 3
2) аплоадим на фтп файлы, в случае успеха аплоада после каждого файла удаляем его из папки
3) ожидаем 1 час, потом проверяем есть ли файлы в папке, если появились шаг 1

Всего записей: 1033 | Зарегистр. 30-05-2006 | Отправлено: 18:45 14-03-2018
zhudionis



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сам не программист, но кое-что понимаю)
Есть программа, которая может работать с VBscript.
Нужно написать скрипт, скачивающий xml с прогнозом погоды и распределяющий данные из xml по переменным.
Переменные должны быть числовыми (например bite, long, integer и др).
Прошу помощи.
Пиво гарантирую.

Всего записей: 116 | Зарегистр. 25-05-2009 | Отправлено: 04:31 16-03-2018
5peciali5t



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
всех приветствую!
 
направьте на путь истинный...
 
возникла необходимость выдергивать из свойств msp файлов обновлений строку "Название"
например, имеем файл kohhc-x-none.msp, у которого в свойствах "Название"="Update for Microsoft Office 2016 (KB2345678) (kohhc.msp 16.0.4549.1000)"
ps желательно без доп. конс. утилит, не входящих в состав windows
 
может с помощью vbs можно?
скрипт для сбора всех установленных обновлений ms office http://rgho.st/92bQLXKCH
строка 67 извлекает из недр файлов обновлений с произвольными именами из каталога %windir%\installer значения их исходных имен для последующего сохранения с ними, может получится по аналогии выдернуть значения из свойств файлов "Название" или "Комментарий"?
 

Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 22:03 26-03-2018
a929151



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

Код:
sFilename = "2f1f33.msp"  
sFolderPathspec = "C:\Windows\Installer"  
 
Set objShell = CreateObject ("Shell.Application")  
Set objFolder = objShell.Namespace(sFolderPathspec)  
 
File_description =  objFolder.GetDetailsOf(objFolder.Parsename(sFileName), 21)  
wscript.echo File_description


Всего записей: 1359 | Зарегистр. 30-03-2016 | Отправлено: 22:20 26-03-2018
5peciali5t



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
a929151
благодарю... в соседнем топике по командным файлам соединили все воедино
http://forum.ru-board.com/topic.cgi?forum=5&topic=48565&start=1140#18

Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 22:32 26-03-2018 | Исправлено: 5peciali5t, 17:43 27-03-2018
5peciali5t



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
a929151
слона-то сразу и не заметил, присмотрелись к выводу, а там

Цитата:
 
Устанавливается Update for Microsoft Office 2016 (KB2345678) (mso.msp 16.0.4666.1000)
Устанавливается Update for Microsoft Office 2016 (KB2345678) (excel.msp 16.0.4666.1000)
Устанавливается Update for Microsoft Office 2016 (KB2345678) (groove.msp 16.0.4573.1000)
 

потом присмотрелись ко всем пакетам обновлений, а там от произодителя в каждом бардовый фрагмет с номером KB одинаковый и это не реальный номер KB
Update for Microsoft Office 2016 (KB2345678) (excel.msp 16.0.4666.1000)
в ORCA нашел секцию MsiPatchMetadata и подходящий параметр DisplayName или Description
скриншот
 
следующий код код с 67 строки извлекает из той же секции MsiPatchMetadata соседний параметр StdPackageName
Подробнее...
 
Не подскажете как адаптировать под мою задачу?
Буду бесконечно признателен.
 
 

Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 10:57 01-04-2018 | Исправлено: 5peciali5t, 11:17 01-04-2018
a929151



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

Код:
sFilename = "2f1f33.msp"  
sFolderPathspec = "C:\Windows\Installer"  
   
Set objShell = CreateObject ("Shell.Application")  
Set objFolder = objShell.Namespace(sFolderPathspec)  
   
File_description =  objFolder.GetDetailsOf(objFolder.Parsename(sFileName), 34)  
wscript.echo File_description

Всего записей: 1359 | Зарегистр. 30-03-2016 | Отправлено: 11:57 01-04-2018
5peciali5t



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
a929151
к сожалению, вернуло пустую строку

Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 12:26 01-04-2018
a929151



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
5peciali5t
найди то что тебе нужно, если оно там есть))

Код:
getDetails = GetFileDetails("C:\folder\","file.msp")
 
Function GetFileDetails(folderName,fileName)
        On Error Resume Next
        Dim objShell
        Dim objFolder
        Dim HeaderInfoArray(512)
         
        Set objShell = CreateObject("Shell.Application")
        Set objFolder = objShell.NameSpace(folderName)
 
        If (not objFolder is nothing) Then
            For i = 0 to 512    
                HeaderInfoArray(i) = objFolder.GetDetailsOf(objFolder.Items, i)
            Next
            Dim objFolderItem
 
            Set objFolderItem = objFolder.ParseName(fileName)
 
            If (not objFolderItem Is Nothing) then
                Dim objInfo
                For i = 0 To 512        
                    objInfo = objFolder.GetDetailsOf(objFolderItem, i)
                    WScript.Echo i,Space(3-Len(i)),HeaderInfoArray(i) & ":", _  
                    Space(16-Len(HeaderInfoArray(i))),objInfo
                Next
            End If
             
            Set objFolderItem = Nothing
        End If
         
        Set objFolder = Nothing
        Set objShell = Nothing
End Function

Всего записей: 1359 | Зарегистр. 30-03-2016 | Отправлено: 12:42 01-04-2018
5peciali5t



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
a929151
пролистал все, параметр
Description = Security Update for Microsoft Excel 2016 (KB4011727) 32-Bit Edition
не был найден
 
ps попробовал тот код для сбора и переименования уже установленных обновлений, заменив
StdPackageName на Description
в папке %temp%\Updates собрались обновления с именами вида
Security Update for Microsoft Excel 2016 (KB4011727) 32-Bit Edition
теперь бы это все укоротить....

Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 12:58 01-04-2018 | Исправлено: 5peciali5t, 13:06 01-04-2018
a929151



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну не знаю, у меня работает
 
   
 
windows 10 x64 (1803)
 
Сработал на chart2016-kb3114706-fullfile-x64-glb.exe, на chart-x-none.msp тоже пустое поле

Всего записей: 1359 | Зарегистр. 30-03-2016 | Отправлено: 13:07 01-04-2018 | Исправлено: a929151, 13:15 01-04-2018
5peciali5t



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
a929151
вот и я думаю, как так, разные ОС и разрядности перепробовал на виртуалках, нигде не сработало - везде пустая строка.
мне необходимо собирать с распакованных обновлений в формате msp

Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 13:34 01-04-2018
5peciali5t



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

Код:
 
@Echo Off
color 0B
mode con:cols=100 lines=30
Title Установка обновлений для Microsoft Office 2010
for /f %%i in ('dir /b /O-s Updates\*.msp') do (Call :SetupUpd %%i)
 
:SetupUpd
for /f "tokens=*" %%a in ('cscript description.vbs //B //NoLogo Updates\%1') do set "MSPName=%%a"
echo Устанавливается %MSPName%
Updates\%1 /qn /norestart
if %errorlevel% neq 0 Echo %1 installation error >>"%temp%\MSO_Update_Error_Log.txt"  
GoTo :EOF

 
и рядом файл description.vbs сл. содержания

Код:
 
Const MSIOPENDATABASEMODE_PATCHFILE = 32
Set oMsi = CreateObject("WindowsInstaller.Installer")
Set msp = oMsi.OpenDatabase(WScript.Arguments(0),MSIOPENDATABASEMODE_PATCHFILE)
Set qView = msp.OpenView("SELECT `Property`,`Value` FROM MsiPatchMetadata WHERE `Property`='Description'")
qView.Execute : Set record = qView.Fetch()
WScript.StdOut.WriteLine record.StringData(2)
 

 
вывод получается такой:

Код:
 
Устанавливается Update for Microsoft Outlook 2010 (KB4018314) 32-Bit Edition
Устанавливается Update for Microsoft SharePoint Workspace 2010 (KB2878231) 32-Bit Edition
Устанавливается Service Pack 2 for Microsoft Office 2010 (KB2687455) 32-Bit Edition
Устанавливается Service Pack 2 for Microsoft Visio 2010 (KB2687468) 32-Bit Edition
Устанавливается Security Update for Microsoft Office 2010 (KB3203468) 32-Bit Edition
 

Всего записей: 1472 | Зарегистр. 17-07-2009 | Отправлено: 16:56 03-04-2018
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Для скачивания файлов иногда использую скрипт-CMD, запускающий wget и работающий в связке с scriptsplit.vbs. Программа скачивает список ссылок из файла lst.txt — в новый файл со случайным именем, по достижении квоты в 399мб — создавая и наполняя новый файл.
 
Файл "start.cmd"

Код:
 
"G:\_wget\wget.exe" --user-agent="Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0 SeaMonkey/2.23" --header="Accept-Language: ru-RU,ru;q=0.9,en;q=0.8" --wait=1 --rejected-log=_ERROR.LOG -i lst.txt -O- | cscript scriptsplit.vbs
 

Файл "scriptsplit.vbs"

Код:
 
SplitSize = 399 * 1024 * 1024  
 Set FSO = CreateObject("Scripting.FileSystemObject")  
 Set stdin = fso.GetStandardStream(0)  
 Count = 0  
 Set CurrFile = FSO.CreateTextFile("lst" & CStr(Year(Date())) & "-" & Right("0" & CStr(Month(Date())), 2) & "-" & Right("0" & CStr(Day(Date())), 2) & "_" & Replace(Time,":","-") & Count & ".htm",1)  
 Do Until stdin.AtEndOfStream  
   CurrFile.Write stdin.Read(1024)  
   Size = Size + 1024  
   If (Size => SplitSize) Then  
     Count = Count + 1  
     CurrFile.Close  
     Set CurrFile = FSO.CreateTextFile("lst" & CStr(Year(Date())) & "-" & Right("0" & CStr(Month(Date())), 2) & "-" & Right("0" & CStr(Day(Date())), 2) & "_" & Replace(Time,":","-") & Count & ".htm",1)  
     Size = 0 : Data = ""  
   End If  
 Loop  
 CurrFile.Close
 

Вопрос заключается в возможности изменения условия скачивания: этой функции квоты — на скачанное количество ссылок, чтобы новый файл создавался не в зависимости от размера файла, а в зависимости от числа скачанных ссылок. Потому что иначе HTML-файлы перед последующей обработкой приходится объединять, поскольку они разрываются в случайном месте, помимо того, что иногда кодировка файлов слетает.
 
UPD: Сейчас подумалось: в плане производительности не было бы эффективней и проще считать не ссылки — а время с момента создания активного файла? Чтобы запоминалось время, когда текущий наполняемый файл был создан — и если с момента его создания прошло больше трёх часов — создавался бы новый файл? Подошёл бы и такой формат.

Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 06:03 05-04-2018 | Исправлено: D1D1D1D, 09:17 05-04-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 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