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

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

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

Код:
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Global = True
objRegExp.Multiline = True
objRegExp.Pattern =  "<script type=""text/javascript"">((.|\n|\r)*)?</script>"
и далее...
 

Всего записей: 373 | Зарегистр. 18-12-2005 | Отправлено: 18:52 24-06-2022
nicka



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
на aliexpress.com нужно спарсить принадлежность страны при входе на главную страницу
по моему инспектированию это находится в теге
<i class="css_flag css_us" data-spm-anchor-id="a2g0o.home.1000001.i0.650c2145cqsAgh"></i>
конкретно css_flag css_us - меняются последние символы.  
Помогите с решением, пожалуйста.
 
 
это скорее задача на curl, но если можно в среде VB

Всего записей: 756 | Зарегистр. 01-10-2002 | Отправлено: 22:22 03-08-2022 | Исправлено: nicka, 22:23 03-08-2022
us0r



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пытаюсь написать своё небольшое HTA. Пишу код:
 
Код тут
 
Каждый раз после нажатия на кнопку или нажатия на энтер, вылезает интернет эксплорер и спрашивает, что делать с файлом. Что я не так делаю? Как делать так, чтоб работало и не вылазил эксплорер?

Всего записей: 406 | Зарегистр. 06-12-2007 | Отправлено: 18:20 15-11-2022
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А есть на vbs возможность обработать пути до файлов >255 символов ? Скармливаю vbs - скрипту список файлов через TC (нужно именно что long-путей, обрезка до short - крайний случай), пытаюсь через
Код:
 
Set FSO  = CreateObject("Scripting.FileSystemObject")  
Set File = FSO.GetFile(F)
msgbox(File.ShortPath)
обработать, но FSO (ака FileSystemObject) даже не переваривает путь >255 символов (ругается, что "Файл не найден"), не говоря уж о его преобразовании в короткий. С файлами по путям <255 символов всё работает на ура :/ Есть варианты решения данной проблемы ?

Всего записей: 2099 | Зарегистр. 19-09-2011 | Отправлено: 15:13 19-11-2022
929151

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

Код:
MsgBox ShowShortPath("C:\V-Ray 6.00.08 3ds Max 2021-2023\Crack\ScatterCore.ForScatter_Release.dll")
 
Function ShowShortPath(filespec)
    Dim fso, f, s
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFile(filespec)
    s = "The short path for "   & UCase(f.Name) & "<BR>"
    s = s & "is: " & f.ShortPath  
    ShowShortPath = s
End Function[


Всего записей: 373 | Зарегистр. 18-12-2005 | Отправлено: 16:00 19-11-2022
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
929151, так ваш код
Код:
MsgBox ShowShortPath("C:\V-Ray 6.00.08 3ds Max 2021-2023\Crack\ScatterCore.ForScatter_Release.dll")
 
Function ShowShortPath(filespec)
    Dim fso, f, s
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFile(filespec)
    s = "The short path for "   & UCase(f.Name) & "<BR>"
    s = s & "is: " & f.ShortPath  
    ShowShortPath = s
End Function
тоже самое выполняет, что и мой. У вас путь <255 символов и поэтому всё нормально работает. Создайте файл по пути >255 символов и скормите его скрипту. Он вам напишет, что "Файл не найден" (или аналогично огрызнётся). Мне он это в консоль плюёт т.к. я оттуда вызываю его.

Всего записей: 2099 | Зарегистр. 19-09-2011 | Отправлено: 18:53 19-11-2022 | Исправлено: Baltazar500, 18:56 19-11-2022
929151

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Baltazar500
Да, действительно с больше  чем 255 символов не работает.
 

Всего записей: 373 | Зарегистр. 18-12-2005 | Отправлено: 20:04 19-11-2022
Smitis



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

Цитата:
А есть на vbs возможность обработать пути до файлов >255 символов ?

Добавляйте в начало имени файла/папки \\?\

----------
Разум когда-нибудь победит

Всего записей: 3215 | Зарегистр. 09-02-2003 | Отправлено: 16:34 20-11-2022
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis,
Цитата:
Добавляйте в начало имени файла/папки \\?\
Спасибо. Работает. Всего-то и нужна была одна дополнительная строка.

Код:
Set FSO  = CreateObject("Scripting.FileSystemObject")  
F = "\\?\" & F
Set File = FSO.GetFile(F)
msgbox(File.ShortPath)
Хотя и короткий путь для софта которому это дело передаётся н понадобился и всё сократилось ещё больше до (FSO остаётся для разбора текстового файла с путями)
Код:
Set FSO  = CreateObject("Scripting.FileSystemObject")  
F = "\\?\" & F
msgbox(F)

 
Буду теперь знать про device path ...
 
upd: Ахах. У TC (у меня версии 8.01) ещё и заморочка с long путями в файл-листе >255 символов, которые режутся до 259. Теперь надо скрипт переиначивать. Я то исходил из того, что TC в файл-лист бросает long-пути без ограничений и тестировал на подобном, вручную созданном ...
 
upd: Вообщем теперь надо из короткого пути (файлилист теперь будет содержать короткие пути до всех файлов и файлов с путями >255 в частности) получить длинное имя, оставив при этом короткий путь. Т.е. надо через vbs по короткому пути получить полное имя. Хм ...

Всего записей: 2099 | Зарегистр. 19-09-2011 | Отправлено: 10:32 21-11-2022 | Исправлено: Baltazar500, 11:43 21-11-2022
Sinclair83

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Друзья!
 
Помогите объединить два vbscript-файла. Требуется:
искать файлы в заданном каталоге по маске (допускается указывать нескольких типов). Причём искать нужно рекурсивно.
 
Перечисление всех подкаталогов в исходной папке:

Код:
Dim source, mask, objFSO, objFolder
 
source = "E:\tmp"
mask   = "*.vbs;*.cmd"
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(source)
 
ListFiles(source)
ShowSubFolders(objFolder)
 
Sub ShowSubFolders(objFolder)
  Set colFolders = objFolder.SubFolders
  For Each objSubFolder In colFolders
    ListFiles(objSubFolder)
    ShowSubFolders(objSubFolder)
  Next
End Sub
 
Function ListFiles(Folder)
  WScript.Echo Folder
End Function

 
Для поиска файлов по заданной маске нашёл такой код:

Код:
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = objShellApp.NameSpace("E:\tmp")
Set objFolderItems = objFolder.Items()
objFolderItems.Filter 64 + 128, "*.vbs;*.cmd"
For Each objItem In objFolderItems
  strList = strList & objItem.Path & vbNewLine
Next
WScript.Echo "Кол-во файлов, соответствующих маскам *.vbs и *.cmd: " & objFolderItems.Count _
    & vbNewLine & vbNewLine & strList
WScript.Quit 0

 
Вопрос:  как это лучше скомпоновать ?
Далее от найденных файлов потребуется также получение доп. информации .GetDetailsOf (скорее всего в процедуре ListFiles)
 
Заранее спасибо.

Всего записей: 757 | Зарегистр. 07-01-2009 | Отправлено: 19:55 12-03-2023
929151

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

Код:
 
' Путь к папке, которую нужно просканировать
strFolder = "D:\Folder\"
 
' Маска файлов, которые нужно найти
strMask = "*.txt;*.vbs;*.pdf"
 
' Путь к файлу, в который будут записаны результаты поиска
strOutputFile = "D:\output.txt"
 
' Создаем объект FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
 
' Проверяем, существует ли папка
If Not objFSO.FolderExists(strFolder) Then
    WScript.Echo "Папка не существует"
    WScript.Quit
End If
 
' Создаем объект Folder для заданной папки
Set objFolder = objFSO.GetFolder(strFolder)
 
' Создаем объект Shell для получения доступа к свойствам файлов
Set objShell = CreateObject("Shell.Application")
 
' Открываем файл для записи результатов
Set objOutputFile = objFSO.CreateTextFile(strOutputFile, True)
 
' Записываем заголовок в файл
intColCount = objShell.Namespace(objFolder.Path).Items.Count
For i = 0 To intColCount - 1
    strDetails = objShell.Namespace(objFolder.Path).GetDetailsOf(objShell.Namespace(objFolder.Path).Items.Item(i), i)
    objOutputFile.Write strDetails & vbTab
Next
objOutputFile.WriteLine
 
' Перебираем все файлы в заданной папке
For Each objFile In objFolder.Files
    ' Проверяем, соответствует ли имя файла маске
    If InStr(strMask, objFSO.GetExtensionName(objFile.Path)) > 0 Then
        ' Записываем информацию о файле в файл результатов
        Set objFolderItem = objShell.Namespace(objFile.ParentFolder.Path)
        For i = 0 To intColCount - 1
            objOutputFile.Write objFolderItem.GetDetailsOf(objFolderItem.ParseName(objFile.Name), i) & vbTab
        Next
        objOutputFile.WriteLine
    End If
Next
 
' Закрываем файл результатов
objOutputFile.Close
 
' Очищаем объекты
Set objFSO = Nothing
Set objFolder = Nothing
Set objFile = Nothing
Set objShell = Nothing
Set objOutputFile = Nothing
 
WScript.Echo "Готово!"
 
 
 

Всего записей: 373 | Зарегистр. 18-12-2005 | Отправлено: 23:59 12-03-2023
Sinclair83

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
929151,
 
Спасибо большое за труд. И особая благодарность за такие подробные комментарии. Похоже, что Ваша версия работает. Спасибо!  
 
За это время тоже сделал рабочий вариант. За основу взял код перебора каталогов от alexii.
Отсюда.  (4 пост). И добавил то, что уже писал выше.  
 

Всего записей: 757 | Зарегистр. 07-01-2009 | Отправлено: 00:33 13-03-2023 | Исправлено: Sinclair83, 00:33 13-03-2023
Egor2020

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужен VBS-скрипт, который позволяет внедрить любой переданный в качестве параметра командной строки бинарный EXE-файл в VBS-скрипт. Например:
- интерпретатор скриптового языка AutoIt в виде файла AutoIt3.exe;
- универсальную утилиту командной строки TCIMG в виде файла TCIMG.exe;
- универсальную утилиту командной строки NirCmd в виде файла nircmd.exe, скачанную отсюда;
- или утилиту командной строки для вызова WinAPI-функций winapiexec.exe, скачанную отсюда.
 
Скрипт должен генерировать следующий VBS-код:
1) Создание переменной, содержащей бинарный код EXE-файла.
2) Создание объектов "WScript.Shell" и "Scripting.FileSystemObject".
3) Запись бинарного значения переменной в EXE-файл в папке %Temp%.
4) Запуск результативного EXE-файла с ожиданием его завершения.
5) Удаление результативного EXE-файла из папки %Temp% (перед удалением должна быть пауза в 1 секунду во избежание ошибок при удалении файла).
 
Нечто похожее реализовано в AutoIt-скрипте EXE2Bin.au3 от AZJIO:
Подробнее...
 
Скрипт должен работать на всех версиях Windows, начиная с Windows XP и заканчивая Windows 11.

Всего записей: 1726 | Зарегистр. 01-03-2020 | Отправлено: 16:57 27-03-2023 | Исправлено: Egor2020, 08:21 28-03-2023
A27

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите по VBScript. Есть скрипт, который делает http-запрос, и выводит результат через WScript.Echo. Иногда web-узел бывает не доступен и вылетает ошибка. Необходимо подавить вывод сообщения об ошибке. Пробовал использовать через CScript.exe //B - ошибка не появляется, но тогда при успешном http-запросе не отображаются данные, выводимые через WScript.Echo.

Всего записей: 66 | Зарегистр. 30-03-2017 | Отправлено: 05:15 07-06-2023
DenSyo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A27
 
проверяйте статус ответа на запроса, если равен 200, то выводите результат

Код:
If http.Status = 200 Then WScript.Echo

Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 05:59 07-06-2023 | Исправлено: DenSyo, 05:59 07-06-2023
A27

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

Цитата:
проверяйте статус ответа на запроса, если равен 200, то выводите результат
If http.Status = 200 Then WScript.Echo

 
Изначально в скрипте так и было прописано. Если web сайт был не доступен, то это приводило к остановке выполнения скрипта ещё при выполнении метода ".Send", а следующие за ним оператор "If http.Status" и другие уже не выполнялись.
 
Но я, кажется, нашёл решение. Удивительно, но искал я его несколько недель перечитывая справочники и статьи! И только после того, как оставил данный вопрос на форуме, сразу наткнулся на решение. Стоит отметить, что описано оно не информативно, поэтому могу ошибиться в формулировке:
 
В VBScript есть метод Err, который является всегда объявленным. Узнать номер последней ошибки и факт её возникновения можно через Err.Number - если равно 0, то ошибки не было.
Так же имеются две конструкции:
 
On Error Goto 0 - при возникновении ошибки выполнение скрипта останавливается и выводится соответствующее сообщение (действует по умолчанию).
 
On Error Resume Next - отключает обработку ошибок, вывод сообщений о них и завершение скрипта.
 
Действие данных конструкций начинается с точки их указания и до конца тела текущей функции.
 
В моём случае код VBScript принял следующий вид:
 

Код:
...
On Error Resume Next
Http.Send
If Err.Number=0 Then
...
WScript.Echo "..."
End If
On Error Goto 0
...

 
Теперь работает так, как это необходимо.

Всего записей: 66 | Зарегистр. 30-03-2017 | Отправлено: 07:33 07-06-2023
destiny child



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

Код:
 
            ' Calculate the new Left and Top coordinates for the picture to be centered
            Dim placeholderLeftCM, placeholderTopCM, pictureWidthCM, pictureHeightCM
            placeholderLeftCM = wordApp.PointsToCentimeters(rng.Information(5)) ' 5 = wdHorizontalPositionRelativeToPage
            placeholderTopCM = wordApp.PointsToCentimeters(rng.Information(6)) ' 6 = wdVerticalPositionRelativeToPage
 
            ' Replace the placeholder with the PNG picture
            Dim imagePath : imagePath = "путь-до-самой-картинки.png"
            Dim picShape : Set picShape = wordApp.InlineShapes.AddPicture(imagePath, False, True, rng).ConvertToShape()
            picShape.WrapFormat.Type = 3 ' wdWrapFront (numeric value for wrap type 'above(in front of) all text')
            picShape.LockAnchor = True
            picShape.LockAspectRatio = True
 
            pictureWidthCM = wordApp.PointsToCentimeters(picShape.Width)
            pictureHeightCM = wordApp.PointsToCentimeters(picShape.Height)
 
            ' Set the picture position relative to its anchor (original placeholder)
            picShape.RelativeHorizontalPosition = 1 ' wdRelativeHorizontalPositionPage
            'picShape.LeftRelative = -999995 ' wdShapeCenter
            picShape.RelativeVerticalPosition = 1 ' wdRelativeVerticalPositionPage
            'picShape.TopRelative = -999995 ' wdShapeCenter
 
            ' Calculate the new Left and Top coordinates to center the picture relative to the original anchor
            picShape.Left = wordApp.CentimetersToPoints(placeholderLeftCM - (pictureWidthCM/2) + 1.11)
            picShape.Top = wordApp.CentimetersToPoints(placeholderTopCM - (pictureWidthCM/2) + 0.63)
 
            Set picShape = Nothing
 

rng - это положение текстового курсора в документе - куда и надо вставить картинку.
Суть в том, что вставка по умолчанию происходит в прямо скажем непонятном отношении касательно самой картинки.
Т.е. относительно страницы - понятно какие координаты есть, но вот какая реперная точка из самой картинки относительно
страницы эти координаты их и получает - это не ясно. Вроде как это должно было решаться путем задания:
picShape.LeftRelative = -999995 ' wdShapeCenter
picShape.TopRelative = -999995 ' wdShapeCenter
Типа центральную точку и считаем реперной(anchor) - и относительно ее потом и зададим нужные координаты картинки.
НО! Оказывается, что движок ворда/vbscript'a - НЕ принимает значение константы wdShapeCenter, равное -999995!!!!
Типа это значение за пределами значений типа. И это при том! что по умолчанию эти поля содержат в себе -999999!!!!
В итоге приходится делать без этих констант и прибавлять некие условные 1.11 и 0.63 - чтобы выровнять картинку по
этой ее середине относительно места вставки. Но имхо это ерунда какая-то. Что-то где-то сломалось что ли? Что вдруг
совершенно валидную константу нельзя вдруг присвоить в нужном месте???

Всего записей: 3320 | Зарегистр. 01-04-2006 | Отправлено: 22:55 31-07-2023
Chekushka05

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

Всего записей: 86 | Зарегистр. 31-03-2022 | Отправлено: 22:56 04-08-2023 | Исправлено: Chekushka05, 23:07 04-08-2023
Smitis



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

Цитата:
Чтобы при запуске скрипта менялся год, месяц и время на нужные и комп выключался или перезагружался.

cmd.exe
  date /?
  time /?
  shutdown /?
 
Ну, или на чистом WSH
https://learn.microsoft.com/ru-ru/windows/win32/cimwin32prov/setdatetime-method-in-class-win32-operatingsystem
https://learn.microsoft.com/ru-ru/windows/win32/cimwin32prov/win32shutdown-method-in-class-win32-operatingsystem


----------
Разум когда-нибудь победит

Всего записей: 3215 | Зарегистр. 09-02-2003 | Отправлено: 23:26 04-08-2023 | Исправлено: Smitis, 23:37 04-08-2023
JiIdbtlL

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

Всего записей: 116 | Зарегистр. 03-10-2022 | Отправлено: 23:49 04-08-2023 | Исправлено: JiIdbtlL, 11:27 05-08-2023
Открыть новую тему     Написать ответ в эту тему

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