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

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

Автор: ViSiToR
Дата сообщения: 16.09.2008 12:23
maxema 05:50 16-09-2008
Цитата:
созданные объекты в функции не надо удалять

Нет вроде, в справках об этом не упоминается(?).

MIHMIH007 08:26 16-09-2008
Цитата:
Вот полный скрипт

Откуда он? Это вроде не совсем vbs (vba?).

Nagual 11:59 16-09-2008
Цитата:
намного проще было использовать сценарий вместо скрипта

Интересно, а скрипт (Script) это не есть сценарии?
Автор: maxema
Дата сообщения: 16.09.2008 13:45
А как можно получить список файлов с ftp://ftp.drweb.com/pub/drweb/bases/ проверить их даты и скачать те, которые новее новее текущей даты на компутере? Сделать нечто вроде обновляльщика DrWeb...
Автор: mistx
Дата сообщения: 16.09.2008 18:57
Друзья!
подскажите плиз скрипт,
который позволил бы переименовать все файлы на всем диске F:\ xxxx.doc на xxx.rtf
интересует не переименование, а полное конвертирование в структуру rtf

может есть у кого-нибудь готовый?

Заранее благодарю
Автор: Nagual
Дата сообщения: 16.09.2008 21:34
ViSiToR
не в рамках данной темы обсуждение
думаю, что прояснить ситуацию должно наведение на нужный файл и чтение описания
хотя и командный сценарий можно вполне назвать скриптом, но тогда возникнет лишняя путаница, что нежелательно

mistx
думаю, сначала нужно найти утилиту, которая может это сделать, а уж потом смотреть ее параметры и писать сценарий или скрипт
ключевые слова поиска а-ля "doc rtf converter"
думаю, ничего сложного в этом нет
если не получится самому, то определись с утилитой и, возможно, тебе помогут написать его
Автор: ViSiToR
Дата сообщения: 17.09.2008 00:41
Nagual 22:34 16-09-2008
Цитата:
хотя и командный сценарий можно вполне назвать скриптом, но тогда возникнет лишняя путаница, что нежелательно

Путаница возникает лишь от незнания, «Скрипт/Script» это и есть «Сценарии», это дословный перевод слова «Script» с Английского

mistx 19:57 16-09-2008
Цитата:
интересует не переименование, а полное конвертирование в структуру rtf

VBS не самое лучшее средство для этого, возможно AutoIt будет получше?
Автор: alroy
Дата сообщения: 17.09.2008 07:11
maxema
Скрипт обновленя DrWeb уже давно существует вот сюда сходи
http://forum.ru-board.com/topic.cgi?forum=35&topic=33191&glp
Автор: mistx
Дата сообщения: 17.09.2008 12:11
Nagual
ViSiToR

есть скрипт, который ищит файлы по расширению и записывает их в файл.
что необходимо дописать, чтобы он их конвертировал еще в добавок?

On error Resume Next

Dim oWmi
Dim oRef
Dim fso,f

strTitle="File Type Search"
strType=InputBox("What type of file do you want to look for? Do NOT use a period.",strTitle,"vbs")
    If strType="" Then
        wscript.echo "Nothing entered or you cancelled"
        wscript.quit
    End If    
strDrive=InputBox("What local drive do you want to search? Do NOT use a trailing \",strTitle,"c:")
    If strDrive="" Then
        wscript.echo "Nothing entered or you cancelled"
        wscript.quit
    End If    

'trim strDrive just in case the user added a \
strDrive=Left(strDrive,2)

strOutput=InputBox("Enter full path and filename for the CSV file. Existing files will " & _
"be overwritten.",strTitle,"c:\" & strType & "-query.csv")
    If strOutput="" Then
    wscript.echo "Nothing entered or you cancelled"
        wscript.quit
    End If    

strQuery="Select Name,CreationDate,LastAccessed,LastModified," & _
"FileSize,Extension,Drive FROM CIM_DATAFILE WHERE Extension='" & strType & _
"' AND Drive='" & strDrive & "'"

Set fso=CreateObject("Scripting.FileSystemObject")
    If fso.FileExists(strOutput) Then fso.DeleteFile(strOutput)
Set f=fso.CreateTextFile(strOutput)
    If Err.Number Then
        wscript.echo "Could not create output file " & strOutput
        wscript.quit
    End If
    
Set oWmi=GetObject("winmgmts:")
If Err.Number Then
strErrMsg= "Error connecting to WINMGMTS" & vbCrlf
strErrMsg= strErrMsg & "Error #" & err.number & " [0x" & CStr(Hex(Err.Number)) &"]" & vbCrlf
If Err.Description <> "" Then
strErrMsg = strErrMsg & "Error description: " & Err.Description & "." & vbCrlf
End If
Err.Clear
wscript.echo strErrMsg
wscript.quit
End If

Set oRef=oWmi.ExecQuery(strQuery)
If Err.Number Then
strErrMsg= "Error connecting executing query!" & vbCrlf
strErrMsg= strErrMsg & "Error #" & err.number & " [0x" & CStr(Hex(Err.Number)) &"]" & vbCrlf
If Err.Description <> "" Then
strErrMsg = strErrMsg & "Error description: " & Err.Description & "." & vbCrlf
End If
Err.Clear
wscript.echo strErrMsg
wscript.quit
End If

wscript.echo "Working ...."
f.Writeline "FilePath,Size(bytes),Created,LastAccessed,LastModified"

For Each file In oRef
    f.Writeline file.Name & "," & file.FileSize & "," & ConvWMITime(file.CreationDate) & _
     "," & ConvWMITime(file.LastAccessed) & "," & ConvWMITime(file.LastModified)
Next

f.Close

wscript.echo "Finished. See " & strOutput & " for results"

Set oWmi=Nothing
Set oRef=Nothing
Set fso=Nothing
Set f=Nothing

wscript.quit

'************************************************************************************
' Convert WMI Time Function
'************************************************************************************
Function ConvWMITime(wmiTime)
On Error Resume Next

yr = left(wmiTime,4)
mo = mid(wmiTime,5,2)
dy = mid(wmiTime,7,2)
tm = mid(wmiTime,9,6)

ConvWMITime = mo & "/" & dy & "/" & yr & " " & FormatDateTime(left(tm,2) & _
":" & Mid(tm,3,2) & ":" & Right(tm,2),3)

End Function

'EOF

добавлено
для открытия и сохранения разобрался с функцией
Const wdFormatRTF=6
Set oWord = WScript.CreateObject("Word.Application")
oWord.Visible=True
oWord.Documents.Open "c:\test\junk.doc"
set oDoc=oWord.ActiveDocument

oDoc.SaveAs "c:\test\junk.rtf",wdFormatRTF
oWord.DisplayAlerts=False
oWord.ActiveDocument.Close
oWord.Quit


Помогите плиз объединить 2 скрипта для окончательного результата
Автор: ViSiToR
Дата сообщения: 17.09.2008 14:31
mistx 13:11 17-09-2008
Цитата:
Помогите плиз объединить 2 скрипта для окончательного результата

Тут просто можно создать функцию и использовать её когда нужно:


Код: ConvertToRTF ".\Test.txt", ".\Test.rtf"

Function ConvertToRTF(sSrcFile, sDstFile)
    Const wdFormatRTF = 6
    Set oWord = WScript.CreateObject("Word.Application")
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    sSrcFile = fso.GetAbsolutePathName(sSrcFile)
    sDstFile = fso.GetAbsolutePathName(sDstFile)
    
    If fso.FileExists(sSrcFile) Then
        oWord.Visible = False
        oWord.DisplayAlerts = False
        
        oWord.Documents.Open sSrcFile
        oWord.ActiveDocument.SaveAs sDstFile, wdFormatRTF
        oWord.ActiveDocument.Close
        
        oWord.Quit
    End If
End Function
Автор: mistx
Дата сообщения: 17.09.2008 19:58
ViSiToR
я в vbs новичок.
Не могли бы вы показать куда мне данную функцию можно вставить в 1-й скрипт, чтобы после того как doc файлы будут найдены и будет записан отчет о их нахождении, производилось их конвертирование?
Автор: ViSiToR
Дата сообщения: 18.09.2008 00:02
mistx 20:58 17-09-2008
Цитата:
куда мне данную функцию можно вставить в 1-й скрипт, чтобы после того как doc файлы будут найдены и будет записан отчет о их нахождении, производилось их конвертирование?

После будет посложнее (точнее помедленнее), можно во время поиска.
Функцию вставить в конец скрипта, а её вызов в «For Each» цикл...


Код:
....
For Each file In oRef
f.Writeline file.Name & "," & file.FileSize & "," & ConvWMITime(file.CreationDate) & _
"," & ConvWMITime(file.LastAccessed) & "," & ConvWMITime(file.LastModified)

ConvertToRTF file.Name, Left(file.Name, Len(file.Name)-3) & "rtf"
Next
...
Автор: MIHMIH007
Дата сообщения: 18.09.2008 00:35
ViSiToR
тот скрипт который я привёл это к проге Thinstall для создания портативных программ. Но оказалось что здесь много общего)))))
Автор: mistx
Дата сообщения: 18.09.2008 19:47
ViSiToR
расположил так

функцию в конец скрипта (после wscript.quit)
цикл (после wscript.echo "Working ...."
f.Writeline "FilePath,Size(bytes),Created,LastAccessed,LastModified")

работает конечно медлено (да в принципе сойдет)

1. кстати как расшифровать команду
ConvertToRTF ".\Test.txt", ".\Test.rtf"?
никак не могу понять ее.

2. При конвертировании доковские файлы остаются.
Как можно их убрать оставив только rtf?
Автор: ViSiToR
Дата сообщения: 18.09.2008 23:10
mistx 20:47 18-09-2008
Цитата:
как расшифровать команду

Что там расшифровывать? первый параемтр это путь и имя входящего файла, второй это путь и имя исходного файла.


Цитата:
Как можно их убрать оставив только rtf?




Код: ....
For Each file In oRef
f.Writeline file.Name & "," & file.FileSize & "," & ConvWMITime(file.CreationDate) & _
"," & ConvWMITime(file.LastAccessed) & "," & ConvWMITime(file.LastModified)

ConvertToRTF file.Name, Left(file.Name, Len(file.Name)-3) & "rtf"
fso.DeleteFile(file.Name)
Next
...
Автор: mistx
Дата сообщения: 19.09.2008 07:19
ViSiToR
Большое спасибо за помощь!
Автор: MIHMIH007
Дата сообщения: 20.09.2008 11:14
Народ помогите плиз как преобразовать текстовой файл из вида например:

accessing-dwg-f-1.html
accessing_objec-1.html
automatic_loadi-1.html
board-1.cgi.htm
board-2.cgi.htm
board-3.cgi.htm

В вид:

"accessing-dwg-f-1.html" "accessing_objec-1.html" "automatic_loadi-1.html" "board-1.cgi.htm" "board-2.cgi.htm" "board-3.cgi.htm"

Строчек может быть и больше 1000..... тут просто к примеру показано что нужно сделать что бы вместо вертикльного расположения названия файлов был горизонтальный и каждый файл был в ковычки взят и должен быть пробел между названиями.
Спасибо
Автор: ViSiToR
Дата сообщения: 20.09.2008 11:51
MIHMIH007 12:14 20-09-2008
Цитата:
нужно сделать что бы вместо вертикльного расположения названия файлов был горизонтальный и каждый файл был в ковычки взят и должен быть пробел между названиями


Так примерно:


Код: Const ForReading = 1, ForWriting = 2

Set fso = CreateObject("Scripting.FileSystemObject")
sSrcFile = fso.GetAbsolutePathName(".\Test.txt")

Set oFile = fso.OpenTextFile(sSrcFile, ForReading, False)
Dim sLine, sNewFileContent

Do While oFile.AtEndOfStream <> True
    sLine = Trim(oFile.ReadLine)
    
    If sLine <> "" Then sNewFileContent = sNewFileContent & """" & sLine & """ "
Loop

oFile.Close

Set oFile = fso.OpenTextFile(sSrcFile, ForWriting, True)
oFile.Write RTrim(sNewFileContent) & VBCRLF
oFile.Close
Автор: maxema
Дата сообщения: 20.09.2008 18:55

Цитата:
Строчек может быть и больше 1000.....

Наверно не слишком хорошо все это форматировать в память(в целях ее экономного использования), а потом одним разом писать в файл.
Как бы подправить код, чтобы запись шла скажем по 20 форматированных строчек?
Автор: ViSiToR
Дата сообщения: 20.09.2008 20:11
maxema 19:55 20-09-2008
Цитата:
Наверно не слишком хорошо все это форматировать в память

Имхо, лучше (и быстрее) чем записывать в файл каждую строку, тем более что для записи в реальном времени придётся читать весь файл сразу и проходиться по массиву, что в принципе одно и тоже. Текущий метод быстрее будет.
Автор: NovaC
Дата сообщения: 21.09.2008 16:13
Подскажите vbs скрипт который бы
выводил размер папок и файлов начиная с заданной папки и с заданной глубиной.
Автор: ViSiToR
Дата сообщения: 21.09.2008 16:48
NovaC 17:13 21-09-2008
Цитата:
vbs скрипт который бы  
выводил размер папок и файлов начиная с заданной папки и с заданной глубиной

С заданной глубиной? это как?
Вот скрипт для получения размера указанного каталога включая все вложенные файлы и папки:


Код: Set WshShell = WScript.CreateObject("WScript.Shell")
Set oFS = CreateObject("Scripting.FileSystemObject")

sPath = WshShell.ExpandEnvironmentStrings("%Temp%")
Set oDir = oFS.GetFolder(sPath)

MsgBox "Объем каталога [%Temp%]: " & GetDisplaySize(oDir.Size, 2), 64, "Результат"


Function GetDisplaySize(nBytes, iRound)
    aBytes = Array(" Bytes", " KB", " MB", " GB", " TB")
    For i = 4 To 1 Step -1
        If nBytes >= 1024 ^ i Then
            GetDisplaySize = Round(nBytes / 1024 ^ i, iRound) & aBytes(i)
            Exit Function
        End If
    Next
    GetDisplaySize = nBytes & " Bytes"
End Function
Автор: NovaC
Дата сообщения: 23.09.2008 04:01

Цитата:
С заданной глубиной? это как?

Например, если
заданная папка : "C:\Program Files\"
заданная глубина = 2,
то скрипт показывает размер папки : "C:\Program Files\", затем перебирает и показывает размер всех папкок и файлов внутри папки "C:\Program Files\", а если глубина = 3 то соответственно идёт дальше и перебирает и показывает размер всех папкок и файлов из каждого каталога входящего в "C:\Program Files\" и так далее . . .

Вот так можно узнать размер папкок и файлов в заданном каталоге :

Код: Set Root = FSO.GetFolder(WScript.Arguments.Item(0))
Set Folders = Root.SubFolders
Set Files = Root.Files
For Each F in Folders
...F.Size...
Next
For Each F in Files
...F.Size...
Next
Автор: ViSiToR
Дата сообщения: 24.09.2008 01:36
NovaC 05:01 23-09-2008
Цитата:
мне нужно выводить  
> размер папок и файлов начиная с заданной папки и с заданной глубиной

Ок, вот что получилось:


Код: Set FSO = CreateObject("Scripting.FileSystemObject")

iRec_Level = 2
sPath = "C:\Program Files"

iSize = GetFilesSize(sPath, iRec_Level, 0)
sSize = GetDisplaySize(iSize, 2)

MsgBox "Size for [" & sPath & "] with recursion of [" & iRec_Level & "] level(s): " & sSize, 64, "Files Size"

Function GetFilesSize(sPath, iRecurse, iCntFlag)
    Set oRoot = FSO.GetFolder(sPath)
    Set oFiles = oRoot.Files
    Set oFolders = oRoot.SubFolders
    
    iRetSize = 0
    iCount = iCntFlag
    
    iCount = iCount + 1
    
    If iCount >= iRecurse + 1 Then
        GetFilesSize = 0
        Exit Function
    End If
    
    For Each oFile in oFiles
        iRetSize = iRetSize + oFile.Size
    Next
    
    For Each oDir in oFolders
        iRetSize = iRetSize + GetFilesSize(oDir.Path, iRecurse, iCount)
    Next
    
    GetFilesSize = iRetSize
End Function

Function GetDisplaySize(nBytes, iRound)
aBytes = Array(" Bytes", " KB", " MB", " GB", " TB")
For i = 4 To 1 Step -1
If nBytes >= 1024 ^ i Then
GetDisplaySize = Round(nBytes / 1024 ^ i, iRound) & aBytes(i)
Exit Function
End If
Next
GetDisplaySize = nBytes & " Bytes"
End Function
Автор: dexs
Дата сообщения: 25.09.2008 16:44
Суть задачи , надо disable и переносить юзеров в определёную OU , если ю3ер неактивен более 60 дней .
Автор: Minko_Lazer
Дата сообщения: 29.09.2008 20:30
Хочу написать маленький vbs скрипт для запуска firefox + handycache, и хочу, чтобы после закрытия firefox закрывался и handycache.
Вот что-то типа этого:
dim wsfox, wshandy

set wsfox = CreateObject("WScript.Shell")
set wshandy = CreateObject("WScript.Shell")

set wsfox = wsfox.Exec("f:\Mozilla Firefox\firefox.exe /prefetch:1")
set wshandy = wshandy.Exec("f:\HandyCache\HandyCache.exe /prefetch:1")

Do While wsfox.Status = 0
WScript.Sleep 500
Loop
wshandy.Terminate

set wsfox = nothing
set wshandy = nothing

Проблема: ошибка, выскакивающая после работы скрипта: "недопустимый дескриптор окна".
Я не силен в программировании, может кто поможет?
Автор: ViSiToR
Дата сообщения: 29.09.2008 23:20
Minko_Lazer 21:30 29-09-2008
Цитата:
Вот что-то типа этого


А если так попробовать:


Код: On Error Resume Next

set oShell = CreateObject("WScript.Shell")

set oFox = oShell.Exec("""f:\Mozilla Firefox\firefox.exe"" /prefetch:1")
set oHandy = oShell.Exec("""f:\HandyCache\HandyCache.exe"" /prefetch:1")

Do While oFox.Status = 0
    WScript.Sleep 500
Loop

oHandy.Terminate
Автор: Minko_Lazer
Дата сообщения: 30.09.2008 19:23
ViSiToR
Спасибо! Действительно помогло. Все дело в строках:

Цитата:
On Error Resume Next

После этого ошибок не вылетает
Автор: DangerousWulf
Дата сообщения: 01.10.2008 10:11
Привет!
Помогите написать скрипт выключающий удалённый компьютер

написал что то подобное
On Error Resume Next
strComputer = "PLAST-BUH3"
UserName = "Администратор"    
Password = "1"
Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = SWBemlocator.ConnectServer(strComputer,"\root\CIMV2",UserName,Password)
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
    objItem.Win32Shutdown(1)
Next

почему то не работает
Автор: DonkeyHottt
Дата сообщения: 03.10.2008 13:09
Подскажите, пожалуйста, как в vbs заставить активное окно переместиться в нужное место экрана?
Автор: ViSiToR
Дата сообщения: 03.10.2008 18:19
DonkeyHottt 14:09 03-10-2008
Цитата:
как в vbs заставить активное окно переместиться в нужное место экрана?

Встроенными средствами никак.

Можно использовать AutoItX3.dll:


Код: On Error Resume Next

'================== AutoItX3.Control Object Check & Register ==================
Set oShell = WScript.CreateObject("WScript.Shell")
Set oFS = WScript.CreateObject("Scripting.FileSystemObject")

AutoItX3_dll = ".\AutoItX3.dll"

If Not oFS.FileExists(AutoItX3_dll) Then
    MsgBox "AutoItX3.dll Not found." & vbCRLF & vbCRLF & "OK ==> EXIT", 16, "Error"
    WScript.Quit 0
End If

Set oAutoIt = WScript.CreateObject("AutoItX3.Control")

If Not IsObject(oAutoIt) Then
    oShell.Exec "regsvr32.exe /S " & oFS.GetFile(AutoItX3_dll).Path
    
    Set oAutoIt = WScript.CreateObject("AutoItX3.Control")
    
    If Not IsObject(oAutoIt) Then
        MsgBox "Can not register the AutoItX3.Control object." & vbCRLF & vbCRLF & "OK ==> EXIT", 16, "Error"
        WScript.Quit 0
    End If
End If
'================== AutoItX3.Control Object Check & Register ==================



'================================ Script Part ================================

'Title
sTitle = "[CLASS:Notepad;TITLE:Безымянный]"

'Positions
xPos = 100
yPos = 200
Width = 350
Height = 250

'Run Notepad
iPID = oAutoIt.Run(oShell.ExpandEnvironmentStrings("%WinDir%") & "\Notepad.exe")
oAutoIt.WinWait sTitle, "", 5

'Set some text
oAutoIt.ControlSetText sTitle, "", "Edit1", "Test with AutoItX3.Control object"

'Activate the window
oAutoIt.WinActivate sTitle

'Change window positions
oAutoIt.WinMove sTitle, "", xPos, yPos, Width, Height

'Wait 2 seconds
oAutoIt.Sleep 3000

'Set closing text
oAutoIt.ControlSetText sTitle, "", "Edit1", ""
oAutoIt.ControlCommand sTitle, "", "Edit1", "EditPaste", "Now we close this window"

For i = 0 To 5
    'Wait 1 second
    oAutoIt.Sleep 1000

    oAutoIt.ControlCommand sTitle, "", "Edit1", "EditPaste", "."
Next

'Close the Notepad
oAutoIt.ProcessClose iPID

'================================ Script Part ================================
Автор: DonkeyHottt
Дата сообщения: 04.10.2008 23:44
ViSiToR
Супер! Спасибо! Буду думать теперь как притулить к моей задаче. У меня скрипт запускает некую программу окно которой появляется на экране. Потом он крутит там всякие ручки, нажимает кнопки и в конце должен переместить окно в нужное мне место экрана. Всегда постоянное. Вот теперь буду пробовать это осуществить.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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