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

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



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, я нашёл Microsoft Windows Script Host 2.0 Developer's Guide на русском, то что нужно.)

Всего записей: 2 | Зарегистр. 15-12-2011 | Отправлено: 18:11 16-12-2011
Svyazist



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Привет всем, нужна помощь в написании скрипта, никак не могу разобраться с пробелами.
 Задача простая - архивация файлов
Есть вот такая структура
Задаваемые параметры
Archivator="C:\Program Files\7-Zip\7z.exe"
ArchivParam1="a"
 
 Далее формируем команду:
ArchivCommand1=CHR(34) & Archivator & ArchivParam1 & CHR(34)
Запускаем ее
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ArchivCommand1, 1, vbTrue
 
 Соответственно получаем ошибку "не удается найти указанный файл"
я так понимаю что Run не находит файл по этому пути C:\Program Files\7-Zip\7z.exe т.к. в нем пробелы.
 
 
 Как обойти? Поисковики замучил, ответа на свой вопрос не нашел, возможно что не правильно искал.
 
 Заранее благодарен.
 
lion shadow
 
 можно ссылку в личку, очень бы пригодилось. Спасибо.

Всего записей: 450 | Зарегистр. 26-10-2002 | Отправлено: 14:38 19-12-2011 | Исправлено: Svyazist, 14:40 19-12-2011
Evgeny972



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Svyazist
ArchivCommand1=CHR(34) & Archivator & CHR(34)& " " & ArchivParam1
Поскольку файла «C:\Program Files\7-Zip\7z.exea» дейчтвительно не существует

Всего записей: 15511 | Зарегистр. 23-08-2002 | Отправлено: 15:13 19-12-2011
Svyazist



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

Цитата:
ArchivCommand1=CHR(34) & Archivator & CHR(34)& " " & ArchivParam1
Поскольку файла «C:\Program Files\7-Zip\7z.exea» дейчтвительно не существует
 

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

Всего записей: 450 | Зарегистр. 26-10-2002 | Отправлено: 15:23 19-12-2011 | Исправлено: Svyazist, 15:36 19-12-2011
megamozg13



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Archivator="C:\Progra~1\7-Zip\7z.exe"
?

Всего записей: 313 | Зарегистр. 27-07-2004 | Отправлено: 15:38 19-12-2011
Svyazist



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

Цитата:
Archivator="C:\Progra~1\7-Zip\7z.exe"
?

 
 Спасибо, это поможет только для Program files. Как быть с другими путями не системных папок?

Всего записей: 450 | Зарегистр. 26-10-2002 | Отправлено: 15:52 19-12-2011
megamozg13



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот нашел у забугорных коллег:

Цитата:
 
Function qq(strIn)  
 qq = Chr(34) & strIn & Chr(34)  
End Function  
Set wshShell = WScript.CreateObject ("WSCript.shell")  
wshshell.run qq("C:\Program Files\WinRAR\WinRAR.exe"), 6, True  
set wshshell = Nothing
 

Всего записей: 313 | Зарегистр. 27-07-2004 | Отправлено: 16:15 19-12-2011
Evgeny972



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

Цитата:
Пытаюсь вывести на экран команду, она выводится правильная, с пробелом

Что выводится на экран? Это:
"C:\Program Files\7-Zip\7z.exe a". Так это неправильно. Файла «7z.exe a» тоже не существует
Правильно
"C:\Program Files\7-Zip\7z.exe" a
 
 
Добавлено:
Если запустить, то что ты привел, действительно: Система не может…
Если заменить, как я сказал

Код:
Archivator="C:\Program Files\7-Zip\7z.exe"
ArchivParam1=" a"
ArchivCommand1=CHR(34) & Archivator & CHR(34)& ArchivParam1
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ArchivCommand1, 1, vbTrue

ошибки скрипта нет, мелькает окошко

Всего записей: 15511 | Зарегистр. 23-08-2002 | Отправлено: 18:10 19-12-2011
Svyazist



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

Цитата:
Archivator="C:\Program Files\7-Zip\7z.exe"
ArchivParam1=" a"
ArchivCommand1=CHR(34) & Archivator & CHR(34)& ArchivParam1
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ArchivCommand1, 1, vbTrue  

 
 Спасибо за помощь, привел к этому виду, , все заработало
Archivator="C:\Program files\7-Zip\7z.exe"
ArchivParam1=Probel & "a" & Probel & Destinition & Data & ".7z" & Probel & "-slp" & Probel & SorceFolder & Probel & "-ssw" & Probel & "-sccUTF-8" & Probel & ">" & Destinition & Data & ".txt"
ArchivCommand1=CHR(34) & Archivator & CHR(34)& ArchivParam1
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "%comspec% /c " & ArchivCommand1, 0, vbTrue
 
 Probel соответственно - " "
SorceFolder, Destinition, Data  - переменные.
 Может кому пригодится такая структура для архивирования папок.
 
 И еще вопрос, есть некая переменная в которую пишутся сообщения в процессе работы скрипта. Переменная по умолчанию, не массив. Потом данные из этой переменной отправляем в теле письма т.е. вставляем в objEmail.Textbody Получается примерно так:
Message = " текст1" & VbCrLf
Message = Message & "текст2"  & VbCrLf
objEmail.Textbody = Message
 В итоге в теле письма приходит все в одну строчку, как обойти?
Думаю либо писать сначала в отдельный временный файл методом writeline, потом считывать построчно, либо может использовать массив. Подскажите пожалуйста.

Всего записей: 450 | Зарегистр. 26-10-2002 | Отправлено: 09:40 20-12-2011 | Исправлено: Svyazist, 09:51 20-12-2011
AndVGri

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Svyazist
WriteLine пишет тоже VbCrLf, для разделения строк (стандарт Windows).
Попробуй ещё в качестве разделителя строк для Message VbLf или VbCr.

Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 09:49 20-12-2011
OOD

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите как нажать на окне в панели задач кнопку свернуть?
запускаю OUTLOOK 2010
 

Код:
 function main($state)
{
// Производим запуск
$WSHShell=WScript.CreateObject("WScript.Shell");
$WSHShell.Run("OUTLOOK.EXE", 7, $state);
};
// Запускаем приложение свернутым в трей
main(2);
 

Но после запуска оно находиться в панели задач, а чтобы его свернуть нужно клацнуть по этому окну и нажать кнопку свернуть, как бы это автоматизировать?

Всего записей: 3378 | Зарегистр. 20-05-2006 | Отправлено: 12:29 22-12-2011
D77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалста, а то совсем не шарю
Нужно  с задержкой включить vpn-соединение
 
WScript.Sleep 50000
Set WshExec = WshShell.Exec("C:\001\lan2\vpn.lnk")
 
Пишет - файл не является приложением Win32

Всего записей: 184 | Зарегистр. 16-11-2003 | Отправлено: 18:39 22-12-2011
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D77
во-первых нет ссылки на объект WSHShell, во-вторых, не совсем понял для чего нужно торкать линк.
Код:
Set WSHShell = WScript.CreateObject("WScript.Shell")
strExecute = "C:\001\lan2\vpn.lnk"
 
WSHShell.Run strExecute, 0, False

 
OOD
Outlook, надо полагать, из офисного пакета? если да, то на сайте мелкомягких валяется sdk для офиса, там в доках есть описание что да как. а так, на скидку могу лишь предположить о том, что сабж наследовал от прежних версий параметр StartMinimized или похожий.

Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 19:16 22-12-2011
D77

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ComradG
 
А как торкнуть само соединение я не знаю
Подскажите

Всего записей: 184 | Зарегистр. 16-11-2003 | Отправлено: 19:55 22-12-2011
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D77
а мне, если честно, влом объяснять. да и с vpn'ами я не особо люблю возиться через wsh-скрипты.

Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 20:01 22-12-2011
OOD

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ComradG
StartMinimized работает и в трее появляется оутлук ,но он дублируется злостным окном , которое никак не исчезает из панели задач, писал на делфи програмку которая ищет все заголовки и поочереди сворачивает их через win api -толку нет

Всего записей: 3378 | Зарегистр. 20-05-2006 | Отправлено: 20:28 22-12-2011
diskmen

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

Код:
strComputer = "."
Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colItems = wmi.ExecQuery("Select * from Win32_Directory where drive=""c:"" and  and filename like '%folder%'")  
For Each objItem in colItems
Select Case  objItem.name  
Case "folder 1"
действие1
Case "New folder"
действие2
End Select
Next

 
Буду рад любой помощи.

Всего записей: 12 | Зарегистр. 22-07-2007 | Отправлено: 22:32 22-12-2011 | Исправлено: diskmen, 22:32 22-12-2011
Scaramanga



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго времени суток.
Есть часть  кода:
 

Код:
 
Dim strRegistryKeyAndSubsToDelete: strRegistryKeyAndSubsToDelete= "\Software\Programm 1"
Dim strNTUserDatPath, i
For i = 0 To UBound(arrProfilePaths)
    strNTUserDatPath = arrProfilePaths(i) & "\" & "ntuser.dat"
    If objFSO.FileExists(strNTUserDatPath) = True Then
        'LOAD the HIVE from the current ntuser.dat file into "TmpLoadHive"
        strRun = "REG.EXE load HKU\TmpLoadHive " & Chr(34) & strNTUserDatPath & Chr(34)
        intReturn = oShell.Run(strRun, 0, True)  
        'DELETE the key and subkeys in the TmpLoadHive
        DeleteKeyAndSubsFromTmpLoadHive "TmpLoadHive" & strRegistryKeyAndSubsToDelete
strKeyNameToDelete
         strRun = "REG.EXE unload HKU\TmpLoadHive"
        intReturn = oShell.Run(strRun, 0, True)
    Else
    End If

 
В данном коде параметру strRegistryKeyAndSubsToDelete присваивается значение \Software\Programm 1, помогите пожалуйста изменить код так чтобы можно было присвоить n-ое кол-во значений для этого параметра (т.е. чтобы удалялся не только указанный раздел реестра, а несколько указанных разделов.  
 
Пробывал так:

Код:
 
Dim strRegistryKeyAndSubsToDelete (1): strRegistryKeyAndSubsToDelete (1)
strRegistryKeyAndSubsToDelete (0) = "\Software\Programm 1"
strRegistryKeyAndSubsToDelete (1) = "\Software\Programm 2"
Dim strNTUserDatPath, i
For i = 0 To UBound(arrProfilePaths)
    strNTUserDatPath = arrProfilePaths(i) & "\" & "ntuser.dat"
    If objFSO.FileExists(strNTUserDatPath) = True Then
        'LOAD the HIVE from the current ntuser.dat file into "TmpLoadHive"
        strRun = "REG.EXE load HKU\TmpLoadHive " & Chr(34) & strNTUserDatPath & Chr(34)
        intReturn = oShell.Run(strRun, 0, True)  
        'DELETE the key and subkeys in the TmpLoadHive
        DeleteKeyAndSubsFromTmpLoadHive "TmpLoadHive" & strRegistryKeyAndSubsToDelete (1)
strKeyNameToDelete
         strRun = "REG.EXE unload HKU\TmpLoadHive"
        intReturn = oShell.Run(strRun, 0, True)
    Else
    End If

Удаляет только значение присвоенное strRegistryKeyAndSubsToDelete (1)  в чем ошибка?
Заранее спасибо

Всего записей: 516 | Зарегистр. 24-04-2008 | Отправлено: 17:00 23-12-2011 | Исправлено: Scaramanga, 17:37 23-12-2011
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Scaramanga
 
попробуй это, токо осторожно, не удали что-то нужное
 
 

Цитата:
Set r=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
 
DelSubkey &H80000002,"","test"
 
 
sub DelSubkey(root,key,del_text)
iR = r.EnumKey(root,key,dsSubKeys)
if iR=0 and IsArray(dsSubKeys)=-1 then
    For each dsKey in dsSubKeys
    DelSubkey root,key+"\"+dsKey,del_text
    Next
    end if
if instr(key,del_text)>0 then
 r.DeleteKey root,key
else
ir=r.EnumValues(root,key,val,vtype)
if iR=0 and IsArray(val)=-1 then
        for k=0 to ubound(val)
        if instr(cstr(val(k)),del_text)>0 then r.DeleteValue root,key,val(k)
    next
    end if
end if
 
 
end sub

 
 
 
PS
второй параметр может быть Software или System
DelSubkey &H80000002,"software","test"
 
PPS
регистр текста учитывается "test" удалит а "Test" нет  

Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 19:11 23-12-2011 | Исправлено: Black_Lung, 19:35 23-12-2011
ComradG



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

Цитата:
...писал на делфи програмку которая ищет все заголовки...
эээ... ммм... а зачем было изобретать велосипед, когда вывести заголовки окон приложений можно через Word.Application?
Код:
Set objWord = CreateObject("Word.Application")
Set colTasks = objWord.Tasks
 
For Each task In colTasks
   If task.Visible Then
      WScript.Echo task.Name
   End If
Next
 
objWord.Quit
этот скрипт выводит заголовки всех нескрытых окон текущей сессии. если нужно прибить процесс, то
Код:
Set objWord = CreateObject("Word.Application")
Set colTasks = objWord.Tasks
 
'нужно знать название окна
If colTasks.Exists("Outlook") Then
  colTasks("Outlook").Close
End If
 
objWord.Quit
а WinAPI - это крайний случай.
 
diskmen
мда... оснастку wmi то зачем насиловать, когда а)действия производятся локально, б)есть чудо объект под названием FSO (FileSystemObject). только вот я никак не разумею сути вопроса: имелась ли в виду рекурсия папок некоторого каталога или это все же так, нечто абстрактное?

Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 20:26 23-12-2011 | Исправлено: ComradG, 20:27 23-12-2011
Открыть новую тему     Написать ответ в эту тему

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