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

» Программирование "удобняшек" на VBScript (Часть 2)

Автор: Free_Soft
Дата сообщения: 05.08.2011 20:02
ComradG

Цитата:
в смысле?

В смысле, описание точки будет "Автоматически созданная точка восстановления", независимо от того, что ты укажешь в (ObjSysRr.CreateRestorePoint("VBS_Script", 7, 100))

Добавлено:
Хотя, если нажать "Поиск затрагиваемых программ", там описание будет уже такое же, какое указано в скрипте.
Автор: ComradG
Дата сообщения: 05.08.2011 20:13
Free_Soft
не знал. я создавал точки восстановления через PowerShell v1.0, используя эту vbs'ку с нужными именами и все пучком. причем как локально, так и удаленно. может попробовать сбросить настройки до дефолтных? я про сервис восстановления.
Автор: Free_Soft
Дата сообщения: 05.08.2011 20:40
ComradG

Цитата:
сбросить настройки до дефолтных? я про сервис восстановления.

это как?
Автор: ComradG
Дата сообщения: 05.08.2011 21:36
Free_Soft
если не ошибаюсь, то как-то так:
Код: Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default")
Set colItem = objWMIService,Get("SystemRestore")

colItem.RestoreDefaults()
Автор: Free_Soft
Дата сообщения: 05.08.2011 22:02
ComradG
Пасиб, полезненько
Автор: Alinika
Дата сообщения: 10.08.2011 21:50
HELP засада! Мне надо прописать подписи в outlook express на 90 компах, что бы засунуть в нужную ветку параметры подписи надо получить GUID и туда параметры засунуть, как это сделать?

А всё спасибо догадалась сама
Автор: JangooFett
Дата сообщения: 23.08.2011 08:13
Всем привет.
Я новичок, практически ничего не знаю в VBS, помогите, пожалуйста.
Начальство поставило задачу:
есть каталог с вложенными подкаталогами, вложенность неограничена, нужно сделать обход по всем подкаталогам с выводом списка новых/изменившихся файлов с последнего запуска скрипта или выводом ярлыков этих файлов в папку на рабочем столе.
Спасибо.
Автор: ComradG
Дата сообщения: 23.08.2011 15:44

Цитата:
выводом ярлыков этих файлов в папку на рабочем столе.
а смысл? если вложенность каталогов неограничена, то это ж пиндыр чего будет на рабочем столе.

Цитата:
вложенность неограничена...с выводом списка новых/изменившихся файлов
опять-таки: если вложенность неограничена, то скорость работы сценария оставит желать лучшего. может, прежде, чем вообще браться за разработку скрипта стоит сперва пересмотреть критерии поставленной задачи?
Автор: JangooFett
Дата сообщения: 23.08.2011 16:56
Ну скорей не неограничена, а до 10, это я сразу максимум хватанул)
Автор: JangooFett
Дата сообщения: 29.08.2011 07:38
Нашел здесь такой скрипт, он копирует новые файлы в папку, но после копирования выдает ошибку:
Строка: 37
Символ: 6
Ошибка: Файл не найден

И как ему жестко указать на конкретную папку, без выбора?


Код:
Option Explicit
Dim fso, objShell, objFolder, NotFirst, flag

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "Выбор начальной папки поиска", &H1, 17)
If Not objFolder Is Nothing Then
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFolder = fso.GetFolder(objFolder.Self.path)
On Error Resume Next
fso.CreateFolder objFolder.path & "\" & Date
On Error GoTo 0
SearchAndMoveFiles objFolder, objFolder.path & "\" & Date
Else: wsh.Quit
End If

If flag Then
MsgBox "Новые файлы скопированы в '" & objFolder.path & "\" & Date & "\" & "'"
Else
MsgBox "Новые файлы не найдены"
End If

Set fso = Nothing
Set objFolder = Nothing
Set objShell = Nothing

Function SearchAndMoveFiles(fld, T_path)
Dim objSubFolder, objFile, DaysQ

If Not NotFirst Then
DaysQ = InputBox("Для поиска файлов введите кол-во дней," & vbCrLf _
& "предшествующих сегодняшнему.", , 3)
If DaysQ = "" Then wsh.Quit ' Завершение без сообщения
If Not IsNumeric(DaysQ) Or DaysQ = 0 Or DaysQ > 5 Then wsh.Quit ' Завершение без сообщения
End If

For Each objFile In fld.Files
If (Now - objFile.DateLastModified) < DaysQ + 1 Then
If T_path <> fld.path Then
objFile.Copy T_path & "\"
flag = True
End If
End If
Next
NotFirst = True
For Each objSubFolder In fld.SubFolders
SearchAndMoveFiles objSubFolder, T_path
Next
Set objSubFolder = Nothing
Set objFile = Nothing
End Function
Автор: JangooFett
Дата сообщения: 30.08.2011 11:01
Собрал еще один скрипт, он создает ярлыки на изменившиеся файлы, но имена ярлыков почему-то кракозябрами.
И как бы теперь сделать так, чтобы он не учитывал временные файлы офисного пакета (маска .~*)


Код:
Dim strFolder, dstFolder, File, objFSO, objFolder, WSHShell

strFolder = "U:\shef"
dstFolder = "C:\newfiles"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set objFolder = objFSO.GetFolder(strFolder)
Set colFiles = objFolder.Files

For Each objFile In colFiles
File = objFile.ShortName
Doit File
Next

ShowSubFolders(objFolder)
Sub ShowSubFolders(objFolder)
Set colFolders = objFolder.SubFolders
For Each objSubFolder In colFolders
Set colFiles = objSubFolder.Files
For Each objFile In colFiles
File = objFile.ShortName
Doit File
Next
ShowSubFolders(objSubFolder)
Next
End Sub

Function Doit(File)
On Error Resume Next
If (Now - objFile.DateLastModified) < 1 Then
Set MyShortcut = WSHShell.CreateShortcut(dstFolder & "\" & File & ".lnk")
MyShortcut.TargetPath = objFile
MyShortcut.WorkingDirectory = objFolder
MyShortcut.WindowStyle = 4
MyShortcut.Save
End If
End Function
Автор: gap5
Дата сообщения: 07.09.2011 11:03
Подскажите, как реализовать скрипт по отключению всех локальных юзеров (чтобы работали только доменные)?

Через CLI есть команда

net user administrator \active:no

Но вариант net user * \active:no не прокатывает...
Автор: ComradG
Дата сообщения: 07.09.2011 18:40
gap5
в смысле отключить гостя?

Код: Set objGuest = GetObject("WinNT://atl-ws-01/Guest")
objGuest.AccountDisabled = True
objGuest.SetInfo
Автор: ygoda52
Дата сообщения: 25.09.2011 15:58
Подскажите пожалуйста как с помощью vbscript скрипта открывать по очереди страницы в IE и находить там фразу "код ответ 0"
Спасибо
Автор: megamozg13
Дата сообщения: 30.09.2011 16:09
Всем привет. нарисовал свой маленький HTA скриптик "файл-браузер".
все файлы будут только - видео (фильмы и мультяшки). написал на замену довольно-таки тяжелому софту "xbmc", задача простая нужно - меню со списком файлов и каталогов в папке(ах). клик - файл открылся в проигрывателе. всё управление хочу заточить на три кнопки "вверх" "вниз" и "ввод" (они эмулируются пультом д/у).

осталось решить два вопроса:
1) что бы ссылки не меняли цвет после "клика"
2) можно ли сделать видимый курсор, чтобы было видно
подскажите кто что знает...

[more]
file_browser.hta

<HTML> <TITLE>media file browser</TITLE>
<HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">

<HTA:Application
ID="MFB"
Border = Thick
windowState = maximize
BorderStyle = Complex
ShowInTaskBar = Yes
APPLICATIONNAME="media file browser"
SCROLL=yes
SINGLEINSTANCE=Yes
MaximizeButton = No
MinimizeButton = No
navigable=No
singleInstance=yes>
</HEAD>

<SCRIPT>
var BackFolder="";
var TekFolder="";

function window.onload() {
oTekFolder.innerHTML = "<p><a NAME=\"D:\\films\\\" onClick=\"GoBackFolder()\">D:\\films</a></p>";        
TekFolder = "D:\\films\\";        
BackFolder = TekFolder;
oFolders.innerHTML = "Список папок";
oFiles.innerHTML = "Список файлов";
oRoot.innerHTML = "<p><a NAME=\"D:\\films\" onClick=\"UpdateFolder(name)\">Фильмы</a></p><p><a NAME=\"D:\\mults\" onClick=\"UpdateFolder(name)\">Мультики</a></p>";
UpdateForm();
}

function UpdateFolder(in_str){
    BackFolder=TekFolder;
oTekFolder.innerHTML = "<p><a NAME=\""+in_str+"\" onClick=\"GoBackFolder()\">"+in_str+"</a></p>";;
TekFolder = in_str;
UpdateForm();
}

function GoBackFolder(){
TekFolder=BackFolder;
oTekFolder.innerHTML = "<p><a NAME=\""+TekFolder+"\" onClick=\"GoBackFolder()\">"+TekFolder+"</a></p>";
UpdateForm();
}

function UpdateForm() {
    // Общий обьект ф. системы
var fso = new ActiveXObject("Scripting.FileSystemObject");
// Проверка существоания текущей папки
if (!fso.FolderExists(TekFolder)) { oFolders.innerHTML="Папка не существует"; oFiles.innerHTML=""; return(0) };
// обработка подпапок
fldr_list = fso.GetFolder(TekFolder);
fldr_list_enum = new Enumerator(fldr_list.SubFolders);
oFolders.innerHTML = "";
for (; !fldr_list_enum.atEnd(); fldr_list_enum.moveNext())
{
oFolders.innerHTML = oFolders.innerHTML +
"<p><a name=\""+fldr_list_enum.item()+"\" id=\""+fldr_list_enum.item()+"\" onClick=\"UpdateFolder(name)\">"+fldr_list_enum.item()+"</a></p>";
}
// обработка файлов
fldr_list = fso.GetFolder(TekFolder);
files_list_enum = new Enumerator(fldr_list.Files);
oFiles.innerHTML = "";
for (; !files_list_enum.atEnd(); files_list_enum.moveNext())
{
oFiles.innerHTML = oFiles.innerHTML + "<p><a href=\""+files_list_enum.item()+"\" color:#80ffff>"+files_list_enum.item()+"</a></p>";
}
// выход
}
</SCRIPT>

<BODY BGCOLOR="black">
<SPAN STYLE="font:15 pt; color:white;">Корневые папки:</SPAN>
<SPAN STYLE="font:20 pt; color:#80ffff;"><PRE ID=oRoot> </PRE></SPAN>
<hr>

<SPAN STYLE="font:15 pt; color:white;">Текущая папка:</SPAN>
<SPAN STYLE="font:20 pt; color:#80ffff;"><PRE ID=oTekFolder> </PRE></SPAN>
<hr>

<SPAN STYLE="font:15 pt; color:white;">Список подпапок:</SPAN>
<SPAN STYLE="font:20 pt; color:#80ffff;"><PRE ID=oFolders> </PRE></SPAN>
<hr>

<SPAN STYLE="font:15 pt; color:white;">Список файлов:</SPAN>
<SPAN STYLE="font:20 pt; color:#80ffff;"><PRE ID=oFiles> </PRE></SPAN>
<hr>

</BODY>

</HTML>
[/more]
Автор: ComradG
Дата сообщения: 30.09.2011 18:25
megamozg13

Цитата:
1) что бы ссылки не меняли цвет после "клика"
дык а каскадные таблицы стилей на что? в хэде всталяешь пару:
Код: <style type="text/css">
</style>
Автор: megamozg13
Дата сообщения: 01.10.2011 08:39
ComradG
спасибо, буду копать дальше.

Докрутил с цветами ссылок и получилось сделать подобие курсора.
вдруг кому пригодится или интересно

осталось только прикрутить управление не мышкой а клавиатурой, кто бы на вел на мысль куда копать(тут своих идей пока нет совсем)?
Автор: ygoda52
Дата сообщения: 01.10.2011 18:26
ComradG

Цитата:
Подскажите пожалуйста как с помощью vbscript
лучше юзать JScript, а поиск некоторой фразы осуществлять с помощью Dictionary.

А можно где нибудь глянуть конкректный пример
Спасибо
Автор: ComradG
Дата сообщения: 01.10.2011 19:23
ygoda52
писать целый скрипт не стану, но укажу векторы от которых следует плясать.
1)прежде, чем работать с IE, нужно создать на него ссылку:

Код: Set objIE = CreateObject("InternetExplorer.Application")
Автор: ygoda52
Дата сообщения: 02.10.2011 14:14
ComradG

Спасибо.
Будем изучать.
Правда в иностранных языках не силён.
Если не трудно несколько строк по использованию поиска определенных слов
с использованием ссылки на объект Dictionary
Автор: megamozg13
Дата сообщения: 03.10.2011 10:31
Вот докрутил файл-браузер
Объясню немного:
1) в заголовке две постоянные ссылки на "корневые" папки Фильмы и Мультики
2) управление (кнопки) "вверх" "вниз" это скрол экрана, "влево" "вправо" переход курсора по ссылкам, "интер" вызов ссылки.
3) кнопка "текущая папка" при вызове отрабатывает как выход из текущей папки на верх к корню диска.
4) вызов программы, пока закоментирован(кому надо - раскоментировать и указать точный путь к просмотрщику на вашем компе), скрипт ожидает заверешения программы просмотра.

PS: кстати "Media Player Classic" из комплекта "K-Lite Codec Pack" позволяет
1) при открытии файла автоматически переходить в полноэкранный режим.
2) во время проигрывания быть всегда наверху.
3) автоматически закрываться после проигрывания.
Автор: octopus 23
Дата сообщения: 16.10.2011 16:31
Подскажите как с помощью vbscript создать дерево каталогов в текущем каталоге по текстовому файлу - для примера такого содержания:

Фамилия1\Магазин1\Январь
Фамилия1\Магазин1\Февраль
Фамилия1\Магазин1\Март
Фамилия1\Магази2\Январь
Фамилия1\Магазин2\Февраль
Фамилия1\Магазин2\Март

Фамилия2\Магазин1\Январь
Фамилия2\Магазин1\Февраль
Фамилия2\Магазин1\Март
Фамилия2\Магази2\Январь
Фамилия2\Магазин2\Февраль
Фамилия2\Магазин2\Март

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

Спасибо
Автор: OSADJAN
Дата сообщения: 16.10.2011 21:13
А BAT-ник, не подойдёт

Код:
FOR /F "delims=~" %%f in (твой.txt) DO MD "%%f"
Автор: ComradG
Дата сообщения: 16.10.2011 22:30
OSADJAN
дядь, по батникам отдельная ветка есть, и если хочется блестнуть широкими познаниями в батописании, то лучше кидай ссылку на пост в соответсвующей ветке.

octopus 23
вот тебе код, от которого следует танцевать.
Код: Const ForReading = 1

Set objArgs = WScript.Arguments

If objArgs.Count <> 1 Then
WScript.Echo "Не указан файл-список."
WScript.Quit 1
Else
Set objFSO = CreateObject("Scripting.FileSystemObject")

ParseListFile objArgs(0)

Set objFSO = Nothing
End If

Function CreateFolder(strFolder)
objFSO.CreateFolder(strFolder)
End Function

Function ParseListFile(strFile)
Set strContent = objFSO.OpenTextFile(strFile, ForReading)

Do Until strContent.AtEndOfStream
strName = strContent.ReadLine
CreateFolder strName
Loop

strContent.Close

Set strContent = Nothing
End Function
Автор: octopus 23
Дата сообщения: 18.10.2011 00:41
ComradG спасибо большое за код, я пока только учусь - т.е. напильник еще не очень большой - но думаю справлюсь
Автор: OSADJAN
Дата сообщения: 18.10.2011 12:04
ComradG

Цитата:
дядь, по батникам отдельная ветка есть

Принял к сведению...
Заинтересовался
Цитата:
дерево каталогов в текущем каталоге по текстовому файлу - для примера такого содержания:

Фамилия1\Магазин1\Январь
Фамилия1\Магазин1\Февраль
Фамилия1\Магазин1\Март
Фамилия1\Магази2\Январь
Фамилия1\Магазин2\Февраль
Фамилия1\Магазин2\Март

Фамилия2\Магазин1\Январь
Фамилия2\Магазин1\Февраль
Фамилия2\Магазин1\Март
Фамилия2\Магази2\Январь
Фамилия2\Магазин2\Февраль
Фамилия2\Магазин2\Март

сделать скрипт именно по этому тексту - но дело продвинулось только до папок первой вложенности, а дальше пишет

Цитата:
Ошибка:    Недопустимое имя или номер файла
Код:    800A0034

Ну, например:

Код: Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Users\OSA\Desktop\Create\твой.txt", ForReading)

Do Until objFile.AtEndOfStream
strLine = objFile.Readline
strLine = Trim(strLine)

If Len(strLine) > 0 Then
strNewLine= strLine & vbCrLf
End If

MyArray = Split(strNewLine, "\", -1, 1)
fl1 = MyArray(0)
fl2 = MyArray(1)
fl3 = MyArray(2)

If objFSO.FolderExists(fl1) Then
WScript.Echo "Папка " & fl1 &_
" уже существует"
     Else
WScript.Echo "Создаём " & fl1
     objfso.CreateFolder fl1
End If
If objFSO.FolderExists(fl1 & "\" & fl2) Then
WScript.Echo "Папка " & fl2&_
" уже существует"
     Else
WScript.Echo "Создаём " & fl2
     objfso.CreateFolder fl1 & "\" & fl2
End If
If objFSO.FolderExists(fl1 & "\" & fl2 & "\" & fl3) Then
WScript.Echo "Папка " & fl3&_
" уже существует"
     Else
WScript.Echo "Создаём " & fl3
objfso.CreateFolder fl1 & "\" & fl2 & "\" & fl3
End If
Loop
Автор: AndVGri
Дата сообщения: 18.10.2011 13:02
OSADJAN
Посмотри ветку, буквально несколькими страницами назад ComradG писал метод для создания подпапок по заданному пути. За один вызов нельзя создать всё дерево подпапок пути.
Автор: OSADJAN
Дата сообщения: 18.10.2011 13:59

Цитата:
AndVGri

Уже дошло, спасибо.
octopus 23

Код:
Const ForReading = 1
'---------------------
'узнаём местонахождения
path = Replace(WScript.ScriptFullName, WScript.ScriptName, "")
strRoot=path

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Users\OSA\Desktop\Create\твой.txt", 1)
Set objFolder=objFSO.GetFolder(strRoot)
Set colFolders=objFolder.SubFolders
'--------------
'Читаем файл
Do Until objFile.AtEndOfStream
strLine = objFile.Readline
strLine = Trim(strLine)
If Len(strLine) > 0 Then
strNewLine = strLine & "\" & vbCrLf
End If
strPath = strNewLine

MakeDir(strPath)
Loop

Function MakeDir(strPath)
Dim strParentPath, theFSO
Set theFSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
strParentPath = theFSO.GetParentFolderName(strPath)
If Not theFSO.FolderExists(strParentPath) Then MakeDir strParentPath
If Not theFSO.FolderExists(strPath) Then theFSO.CreateFolder strPath
On Error Goto 0
MakeDir = theFSO.FolderExists(strPath)
End Function
Автор: ComradG
Дата сообщения: 18.10.2011 16:37
OSADJAN
ты проделал хорошую работу, молодец, но позволь указать на ошибки. код можно значительно сократить в конструкциях If... Then...
Код: If Not objFSO.FolderExists(...) Then
objFSO.CreateFolder ...
End If
Автор: OSADJAN
Дата сообщения: 18.10.2011 18:52
ComradG. Спасибо...Мне ещё многому надо учиться. За указанные ошибки - отдельное спасибо.
И ещё... Может это будет выглядеть нахально, но всё-таки

Цитата:
если бы ты создал функцию-валидатор

Будет время, пожалуйста, напиши пример... У меня с функциями отношения почти на уровне "Copy-Paste"

Страницы: 12345678910111213141516171819202122232425

Предыдущая тема: Помогите новичку в C++


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