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

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

Автор: vlth
Дата сообщения: 03.12.2009 10:53
BumerangII

Как-то так:

strVar=WshSysEnv("COMPUTERNAME")
...
WshShell.SendKeys strVar

Вряд ли антивирусник может являться объектом, поддерживающем какие-то методы управления извне
Поэтому - только SendKeys, мне кажется. Хотя, безусловно, не 100% надёжный вариант.
Автор: BumerangII
Дата сообщения: 03.12.2009 18:20
vlth спасибо, получилось.

еще вопрос, есть ли возможность не применяю WshShell.SendKeys перейти сразу на пункт в интерфейсе Scan All Fixed Disks



Автор: vlth
Дата сообщения: 03.12.2009 20:00
Если без SendKeys, то можно ещё попробовать создать скрипт автоматизации в InqSoft Sign 0f Misery, хотя там принцип тот же самый, по-моему.
сайт разработчика
Автор: Demon L
Дата сообщения: 06.12.2009 15:39
Помогите, пожалуйста....
Как решить такую задачу:
есть папка "IN" в ней папки вида "01 Январь" "02 Февраль" итд. В папку "IN" постоянно падают файлики *.msg. Нужно раскладывать файлики по дате создания... но так чтоб не учитывать год (для того чтоб получилось универсально)
То есть нужно чтоб файлы которые появились, скажем в январе, оказались в папке "01 Январь" и при этом имя папки куда должен в итоге попасть файл должно определятся только по первым двум цифрам в данном случае "01" и не обращать внимания на остальное название папки (потому как вместо "Январь" там может быть все чт угодно)...
Автор: Hugo121
Дата сообщения: 07.12.2009 13:54
Demon L
Разложить по папкам в зависимости от DateLastModified получилось, но вот только папки должны иметь определённые имена. Сделать "должно определятся только по первым двум цифрам " лениво (вернее, пока не уверен, как, - может обойти все папки, и если начало подходит, присвоить переменной fullpath этой папки, и так 12 раз?).
Я бы задал жёстко названия, ну в любом случае половина дела есть:

Код:
Dim FSO
Dim TheFolder, TheFiles, AFile

Set FSO = CreateObject("Scripting.FileSystemObject")
Set TheFolder = FSO.GetFolder("C:\Temp\IN\") 'Каталог, где смотреть
Set TheFiles = TheFolder.Files
For Each AFile In TheFiles
'msgbox FSO.GetFile(AFile.Path).DateLastModified
If mid((FSO.GetFile(AFile.Path).DateLastModified),4, 2) = "01" Then FSO.MoveFile AFile.Path , "C:\Temp\IN\01\" 'msgbox "01"
next

Автор: cin
Дата сообщения: 07.12.2009 14:53
Добрый день
Потребовалось решить задачу, чувствую, что без vbs не обойтись.
Требуется автоматизировать установку антивируса, а именно, есть сеть примерно из 100 компьютеров, распределенная по разным рабочим группам, примерно так.

workgroup100: workstation_100, workstation_101, workstation_102 ...
workgroup200: workstation_200, workstation_201, workstation_202 ...

и т.п.

установочный файл антивируса копируется на компьютер c однотипным именем требуется написать скрипт в котором бы проверялось имя компьютера, на котором этот скрипт запущен, вычленялась бы составляющая имени, после чего файл копировался с внутригрупповой шары на локальный компьютер и запускалась бы установка (ну это в качестве полного удовольствия...)

Нужна помощь!.
Спасибо.
Автор: Hugo121
Дата сообщения: 07.12.2009 15:23
Demon L
Ну вот такой полуфабрикат получился, худо-бедно работает.
Есть привязка к количеству символов в путях (c:\Temp\IN), высчитай под свои.
Ну и добавь отсустствующие месяцы.

Код:
Dim FSO
Dim TheFolder, TheFiles, AFile
Dim objFolder
Dim sep, nov, dec

on error resume next'иначе выкидывает ошибки после перемещения

Set FSO = CreateObject("Scripting.FileSystemObject")

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colSubfolders = objWMIService.ExecQuery _
("Associators of {Win32_Directory.Name='c:\Temp\IN'} " _
& "Where AssocClass = Win32_Subdirectory " _
& "ResultRole = PartComponent")

For Each objFolder in colSubfolders
if mid(objFolder.Name, 12, 2) = "09" Then sep = objFolder.Name ' : msgbox "OK: " & objFolder.Name :msgbox "sep: " & sep
if mid(objFolder.Name, 12, 2) = "11" Then nov = objFolder.Name
if mid(objFolder.Name, 12, 2) = "12" Then dec = objFolder.Name

REM Wscript.Echo "Name: " & objFolder.Name
Next


Set TheFolder = FSO.GetFolder("C:\Temp\IN\") 'Каталог, где смотреть
Set TheFiles = TheFolder.Files
For Each AFile In TheFiles
'msgbox FSO.GetFile(AFile.Path).DateLastModified
if sep <> "" then : If mid((FSO.GetFile(AFile.Path).DateLastModified),4, 2) = "09" Then FSO.MoveFile AFile.Path , sep & "\"
if nov <> "" then : If mid((FSO.GetFile(AFile.Path).DateLastModified),4, 2) = "11" Then FSO.MoveFile AFile.Path , nov & "\"
if dec <> "" then : If mid((FSO.GetFile(AFile.Path).DateLastModified),4, 2) = "12" Then FSO.MoveFile AFile.Path , dec & "\"

next
Автор: Demon L
Дата сообщения: 08.12.2009 09:30
Hugo121
Спасибо. буду пробовать ... только не совсем пойму "Есть привязка к количеству символов в путях (c:\Temp\IN), высчитай под свои." что нужно высчитать ?

и еще, если я правильно понял, этот скрипт будет обрабатывать все файлы, а нужно только *.msg не трогая остальных файлов..

PS.
Я в этом не шарю совсем... поправь плиз то о чем говоришь...
Автор: Hugo121
Дата сообщения: 08.12.2009 09:36
Demon L
Вот это: if mid(objFolder.Name, 12, 2) = "01" - значит с 12 символа в пути к каталогу C:\Temp\IN\01январь 2-ва символа будут "01". У тебя путь другой, цифры "12" другие...
А в If mid((FSO.GetFile(AFile.Path).DateLastModified),4, 2) цифры 4 и 2 зависят от представления даты на машине, проверь раскомментировав 'msgbox FSO.GetFile(AFile.Path).DateLastModified , у меня 01.12.2009 (т.е. 4, 2 = 12).
Если у тебя дата представлена как 2009.12.01 например, то тогда поменяй в коде на 6, 2.
Я только не уверен, меняется ли это представление даты от настроек системы, где оно её берёт, из биоса или виндовса, не вникал...
Автор: Demon L
Дата сообщения: 08.12.2009 10:14
Hugo121
понял, но так крайне не удобно.
можно сделать так чтоб он сортировал файлы только в каталоге в котором сам находиться (IN)? (дело в том что путь символы которого нужно посчитать, меняется каждый месяц, по этому пересчитывать это каждый месяц не реально...) то есть я положу скрипт в паку IN и он внутри этой паки будет сортировать файлы *.msg ?
Автор: Hugo121
Дата сообщения: 08.12.2009 10:18
Можно, но тут я пока пас, рабочего примера кода нет (как и выше не было, из интереса дома собирал), может кто поопытнее напишет, мне работать надо...
Автор: vlth
Дата сообщения: 08.12.2009 13:58
Demon L

Это надо?

Код: Option Explicit
Dim fso, oFile, oFolder, oSubFolder, strNMonth
Const cstrPath = "C:\tmp\in"

Set fso = wsh.CreateObject("Scripting.FileSystemObject")
Set oFolder = fso.GetFolder(cstrPath)

For Each oFile In oFolder.Files
If LCase(Right(oFile.Name, 4)) = ".msg" Then
strNMonth = CStr(Month(oFile.DateLastModified))
For Each oSubFolder In oFolder.SubFolders
If Left(oSubFolder.Name, 2) = strNMonth Then _
oFile.Move oSubFolder.Path & "\" & oFile.Name
Next
End If
Next
Автор: Hugo121
Дата сообщения: 08.12.2009 15:10
Я свой код подправил, обрабатывает папку с скриптом:

Код:
Dim FSO
Dim TheFolder, TheFiles, AFile
Dim objFolder
Dim sep, nov, dec

on error resume next'иначе выкидывает ошибки после перемещения

Set FSO = CreateObject("Scripting.FileSystemObject")

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

MyPath = left (WScript.ScriptFullName, (Len(WScript.ScriptFullName))-(Len(WScript.ScriptName)))
MyPathShort = Left(MyPath, Len(MyPath)-1)

Set colSubfolders = objWMIService.ExecQuery _
("Associators of {Win32_Directory.Name='" & MyPathShort & "'} " _
& "Where AssocClass = Win32_Subdirectory " _
& "ResultRole = PartComponent")

For Each objFolder in colSubfolders
if mid(objFolder.Name, 12, 2) = "09" Then sep = objFolder.Name ' : msgbox "OK: " & objFolder.Name ': msgbox "september: " & sep
if mid(objFolder.Name, 12, 2) = "11" Then nov = objFolder.Name
if mid(objFolder.Name, 12, 2) = "12" Then dec = objFolder.Name
'msgbox "objFolder Name: " & objFolder.Name '

Next

Set TheFolder = FSO.GetFolder(MyPath) 'Каталог, где смотреть
Set TheFiles = TheFolder.Files

For Each AFile In TheFiles
If UCase(FSO.GetExtensionName(AFile.Path)) = "MSG" then
        'msgbox FSO.GetFile(AFile.Path).DateLastModified
         if sep <> "" then : If mid((FSO.GetFile(AFile.Path).DateLastModified),4, 2) = "09" Then FSO.MoveFile AFile.Path , sep & "\"
         if nov <> "" then : If mid((FSO.GetFile(AFile.Path).DateLastModified),4, 2) = "11" Then FSO.MoveFile AFile.Path , nov & "\"
         if dec <> "" then : If mid((FSO.GetFile(AFile.Path).DateLastModified),4, 2) = "12" Then FSO.MoveFile AFile.Path , dec & "\"
    end if
next

Автор: vlth
Дата сообщения: 08.12.2009 15:49
Hugo121


Цитата:
msgbox strNMonth 'вот здесь надо добиться 2-х знаков


Это если только целевые папки содержат 2 цифры в начале своих названий:

If Len(strNMonth) = 1 Then strNMonth = "0" & strNMonth
Автор: Hugo121
Дата сообщения: 08.12.2009 15:53
vlth
И Вы ломом...
2 цифры были в условии, так оно обычно и есть.
Автор: vlth
Дата сообщения: 08.12.2009 16:05

Цитата:
2 цифры были в условии


Да, да, конечно



Добавлено:
Уппс... не понял сначала про "лом"
Если форматом, то так:
strNMonth = Format(strNMonth, "0#")
Только это в wsh не работает...
Автор: Hugo121
Дата сообщения: 08.12.2009 16:29

Цитата:
Только это в wsh не работает
- то-то не получалось... А как в wsh красиво сделать?
Автор: vlth
Дата сообщения: 08.12.2009 16:46

Цитата:
А как в wsh красиво сделать?


Ну, если это "красиво", можно так:
strNMonth = Right("0" & CStr(Month(oFile.DateLastModified)),2)
Автор: Demon L
Дата сообщения: 09.12.2009 01:03
vlth
Hugo121

Уважаемые Огромное спасибо...
Получился почти идеал… вот только как работать из текущей папки и что нужно поменять чтоб скрипт файлы сложил не в IN\01 (02 03 04….12) а в IN\box\01 (02 03 04…12)
PS. нужны оба варианта.
Автор: Hugo121
Дата сообщения: 09.12.2009 08:06
Demon L
С помощью vlth первый вариант:

Код:
Option Explicit

Dim FSO, oFile, oFolder, oSubFolder, strNMonth
Dim ScPath

ScPath = left(WScript.ScriptFullName, (Len(WScript.ScriptFullName))-(Len(WScript.ScriptName))-1)

Set FSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = FSO.GetFolder(ScPath)
For Each oFile In oFolder.Files
If UCase(FSO.GetExtensionName(oFile.Path)) = "MSG" Then
        strNMonth = Right("0" & CStr(Month(oFile.DateLastModified)),2)
For Each oSubFolder In oFolder.SubFolders
If Left(oSubFolder.Name, 2) = strNMonth Then _
oFile.Move oSubFolder.Path & "\" & oFile.Name
Next
End If
Next

Автор: cin
Дата сообщения: 09.12.2009 09:48
кто нибудь подскажет как скопировать файл с шары?
скрипт запускается с системными правами, там полный доступ на локальную тачку но нет доступа на шары, надо скопировать файл с шары. куда копать?
Автор: Demon L
Дата сообщения: 10.12.2009 23:00
Hugo121
Спасибо, вроде все хорошо... тестирую..

а для чего менять
Цитата:
если строку oFile.Move oSubFolder.Path & "\" & oFile.Name
заменить на FSO.MoveFile oFile.Path , oSubFolder.Path & "\"

?
Автор: Hugo121
Дата сообщения: 11.12.2009 08:07

Цитата:
а для чего менять

Да так, если кто будет вникать/модифицировать - для информации. Оказывается, есть большое различие между oFile.Move и FSO.MoveFile в синтаксисе и механизме операции.
Автор: GRom V
Дата сообщения: 12.12.2009 14:43
У меня Win7... создал для дома профиль обычного пользователя - не админа.
При запуске проги от имени админа постоянно просит ввести пароль. Но пароль админа давать глупо. Можно как нить сделать чтоб пароль вводился автоматом?
Автор: SANIOK_AV
Дата сообщения: 14.12.2009 17:44
Доброго времени суток!
Подскажите пожалуйста как присвоить переменной (к примеру "rezault") значение трёх последних строк текстового файла 1.txt?

Код: Set FSO=WScript.CreateObject("Scripting.FileSystemObject")
Set F=FSO.OpenTextFile("C:\1.txt",1)
...
rezault=...
Автор: vlth
Дата сообщения: 14.12.2009 22:23

Код: Dim fso, f, strText, rezault
Dim i, k
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\1.txt", 1)
strText = f.ReadAll
Do
rezault = Right(strText, i)
i = i + 1
If Left(rezault, 1) = Chr(13) Then k = k + 1
Loop While k < 3
rezault = Right(rezault, i - 3)
Автор: SANIOK_AV
Дата сообщения: 15.12.2009 11:33
vlth
Спасибо большое!
Работает!!!
Автор: ZolotnikOV
Дата сообщения: 17.12.2009 13:07
Может кто знает как задать в скрипте для скачивания в фтп (CuteFTP), в имени папки, что будет скачаваться текущую дату в формате YYYY-MM-DD?
Какие то переменные или как? можно же как то подставлять текущую дату?
Спасибо.
Автор: vlth
Дата сообщения: 17.12.2009 14:36
ZolotnikOV
msgbox year(now)&"-"&Right("0" & CStr(Month(now)),2)&"-"&Right("0" & CStr(day(now)),2)
Автор: KDSKDS
Дата сообщения: 18.12.2009 14:14
Можно ли с помощью VBS нажимать кнопки в MediaPlyer'e?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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