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

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

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хотя Гугл, конечно, знает - вот здесь нашёл. Только программера это из меня не делает. К сожалению
 
Добавлено:
a929151

Цитата:
Then MsgBox objCurFile.Path заменить на Then objCurFile.Delete  

Понял, надеюсь не напортачу

Цитата:
удалит все файлы подходящие под правило.

То, что надо. Только условия задачи надо малёк изменить, потому и спросил:

Цитата:
Цитата:
Стесняюсь, кстати, спросить "Namespace(36)" - это %WinDir%?
 
да  

 
 
Добавлено:
Тогда, в моём случае,  "\WinSxS") нужно убрать, чтобы искало с самого %WinDir%?  
В смысле, 2-й файл находится в %WinDir%\System32. Как сделать, чтобы он попал в условие поиска с самого начала?

Всего записей: 1102 | Зарегистр. 11-01-2019 | Отправлено: 21:58 09-11-2019
a929151



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

Цитата:
Тогда, в моём случае,  "\WinSxS") нужно убрать, чтобы искало с самого %WinDir%?  
В смысле, 2-й файл находится в %WinDir%\System32. Как сделать, чтобы он попал в условие поиска с самого начала?


Код:
ShowSubFolders objFSO.GetFolder(CreateObject("Shell.Application").Namespace(36).Self.Path & "\WinSxS"), "имяфайла"

заменить на

Код:
Set App = CreateObject("Shell.Application")
ShowSubFolders objFSO.GetFolder(App.Namespace(37).Self.Path), "1_й_файл"  
ShowSubFolders objFSO.GetFolder(App.Namespace(36).Self.Path & "\WinSxS"), "2_й_файл"

Всего записей: 1362 | Зарегистр. 30-03-2016 | Отправлено: 22:12 09-11-2019
generator324

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a929151
Пасиб! Попробую чуть позже - появилась проблема. Похоже, Windows не понравились мои "вольные упражнения" с репозиторием, прямо "на ходу" - тестовый файл удалился, но я теперь не могу скопировать в \WinSxS ВООБЩЕ НИЧЕГО, даже в другую подпапку. Пишет, "отказано в доступе" и всё тут
В общем, доигрался х.. на скрипке (с)
Ещё раз благодарю за помощь - надеюсь, завтра всё получится.
Только мне кажется, что последний вариант немного "утяжелён" - файл-то и в System32, и в репозитории один и тот же.

Всего записей: 1102 | Зарегистр. 11-01-2019 | Отправлено: 22:26 09-11-2019
generator324

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a929151
В общем, ситуация: Файл в %WinDir%\System32 (Namespace(37)) - есть.
В %WinDir%\WinSxS - файла нету, так и не удалось скопировать для своих тестов. Файл (имя) - один и тот же, и для System32, и для WinSxS (отсутствует).
Соответственно, заменил на:
Код:
Set App = CreateObject("Shell.Application")
ShowSubFolders objFSO.GetFolder(App.Namespace(37).Self.Path), "просто_файл"  
ShowSubFolders objFSO.GetFolder(App.Namespace(36).Self.Path & "\WinSxS"), "просто_файл"  

Запускаю - получаю ошибку "Строка 9, символ 5: Разрешение отклонено".
Вот эта строка:
Код:
For Each file In Folder.Files

По результатам - файл в System32 удалён, файл в WinSxS...  эээ... Удалять нечего! Потому и ошибка, как я понимаю.
Как бы это пофиксить? Т.е. если не находит, чего удалять, то - просто завершение работы.
 
ЗЫ. Попробовал на другой машине - та же фигня, в WinSxS ничего записать не получается. Как у меня вчера получилось это сделать в 1-й раз - загадка!
ЗЫЫ. Скрипт будет запускаться в режиме ООВЕ (установка Windows), там доступ к WinSxS - полный.

Всего записей: 1102 | Зарегистр. 11-01-2019 | Отправлено: 15:26 10-11-2019
a929151



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

Код:
On Error Resume Next

Всего записей: 1362 | Зарегистр. 30-03-2016 | Отправлено: 15:52 10-11-2019
generator324

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a929151
Вроде хокей . Сегодня я особенно туплю - поспать не удалось, даже 2-х не надо

Всего записей: 1102 | Зарегистр. 11-01-2019 | Отправлено: 17:33 10-11-2019
generator324

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Только что обкатал в "боевых условиях" (при установке Windows 10): всё ОК, файлов в Винде не обнаруженно!

Всего записей: 1102 | Зарегистр. 11-01-2019 | Отправлено: 20:31 10-11-2019
generator324

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Снова здравствуйте!
Вопрос: конструкция вида

Код:
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists("C:\Users\generator324\Desktop\desktop.ini") Then _
   fso.DeleteFile "C:\Users\generator324\Desktop\desktop.ini", true
 
не понимает системных переменных?  
Делаю так:

Код:
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists("%USERPROFILE%\Desktop\desktop.ini") Then _
   fso.DeleteFile "%USERPROFILE%\Desktop\desktop.ini", true
 
- не срабавтывет
Как бы это обойти? Хочется повесить в автозагрузку удаление мусора с рабочего стола для всех _вновь созданных_ пользователей. При явном обращении всё работает...

Всего записей: 1102 | Зарегистр. 11-01-2019 | Отправлено: 17:58 12-11-2019
iNNOKENTIY21



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

Цитата:
не понимает системных переменных?


Код:
MsgBox CreateObject("WScript.Shell").ExpandEnvironmentStrings("%USERPROFILE%") & "\Desktop\desktop.ini"

Всего записей: 3624 | Зарегистр. 16-08-2012 | Отправлено: 18:35 12-11-2019
generator324

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Не совсем понял, а что дальше? Мне б удалить это (desktop.ini) надо . Непонятно, только как.
Кстати, есть ещё вопрос по поводу установки драйверов. Конкретно интересует параметр "DriverUpdateWizardWuSearchEnabled", как он у вас?

Всего записей: 1102 | Зарегистр. 11-01-2019 | Отправлено: 19:04 12-11-2019
a929151



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

Код:
Set App = CreateObject("Shell.Application")
Set fso = CreateObject("Scripting.FileSystemObject")
DesktopINI = App.Namespace(16).Self.Path & "\desktop.ini"
If fso.FileExists(DesktopINI) Then fso.DeleteFile (DesktopINI), true

Всего записей: 1362 | Зарегистр. 30-03-2016 | Отправлено: 19:18 12-11-2019 | Исправлено: a929151, 19:19 12-11-2019
iNNOKENTIY21



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

Цитата:
Не совсем понял, а что дальше?

CreateObject("WScript.Shell").ExpandEnvironmentStrings("%USERPROFILE%") – это раскрывает системные переменные
Дальше формируем путь, сохраняя его в DesktopINI = … и удаляем, указывая уже эту, переменную

Код:
DesktopINI = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%USERPROFILE%") & "\Desktop\desktop.ini"
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(DesktopINI) Then _
fso.DeleteFile DesktopINI, true

Или пользуемся готовым скриптом от a929151

Всего записей: 3624 | Зарегистр. 16-08-2012 | Отправлено: 19:52 12-11-2019
generator324

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a929151
iNNOKENTIY21
Благодарю! Меня тут отвлекли малёк - проверить сегодня может и не получится. Но я не вижу никаких препятствий для работы; всё прозрачно. Попробую...

Всего записей: 1102 | Зарегистр. 11-01-2019 | Отправлено: 20:49 12-11-2019
generator324

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a929151
Всё работает Отлично, ещё раз - Благодарю!
Но столкнулся со старой бедой : нужно скопировать ярлык на скрипт, очищающий Desktop в Автозагрузку, а как использовать системные переменные - не знаю
Пока делаю так:
Код:
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile "C:\Windows\Clear.lnk", "C:\Users\All Users\главное меню\Programs\StartUp\" , true
 

Но в этом случае у меня опять явное задание папки "All Users", а она может быть не только там. Хотелось бы универсальности, типа %ALLUSERSPROFILE% - или чего там есть?
И еще. Нельзя ли сразу добавить в скрипт очистку %TEMP% для Системы и Пользователя?
Мусора там обычно скапливается - Немеренно!

Всего записей: 1102 | Зарегистр. 11-01-2019 | Отправлено: 11:17 13-11-2019
a929151



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

Всего записей: 1362 | Зарегистр. 30-03-2016 | Отправлено: 13:57 13-11-2019
generator324

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

Цитата:
может проще создать ярлык?

Я так и сделал: создал ярлык на ваш скрипт, который копируется в конце Unattend установки Windows в Автозагрузку. В приципе, у меня есть .bat-файл, который чистит %TEMP% - давно и успешно использую его. Просто хотелось соместить "чистку" в одном VBS - это же логично.
А главное - узнать для себя, как копировать файлы, используя системные переменные (мой предыдущий пост).

Всего записей: 1102 | Зарегистр. 11-01-2019 | Отправлено: 14:33 13-11-2019
a929151



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

Всего записей: 1362 | Зарегистр. 30-03-2016 | Отправлено: 14:48 13-11-2019
generator324

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

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

Можно, если умеешь . Я не умею, к сожалению .
А копировать с переменными всё равно надо - не ярлыки, так что-нибудь другое. Согласен - ярлык копировать (и - хранить!) просто глупо...  
По поводу Namespace: кто такой E.S.Migachev? Шютка!
А если серьёзно, я не нашёл варианта с автозагрузкой для "All Users" - может, подскажете?

Всего записей: 1102 | Зарегистр. 11-01-2019 | Отправлено: 15:03 13-11-2019
a929151



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

Код:
Set objShell = Wscript.CreateObject("Wscript.Shell")
[папка автозагрузки] = objShell.SpecialFolders.Item("AllUsersStartup")
MsgBox [папка автозагрузки]

 
Добавлено:
Создать ярлык.vbs

Всего записей: 1362 | Зарегистр. 30-03-2016 | Отправлено: 15:15 13-11-2019 | Исправлено: a929151, 15:33 13-11-2019
generator324

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a929151
Уф! Спасибо! Теперь бы понять, как это работает
Оно показывает, где у меня папка Автозагрузки для AllUsers, угадал?
Теперь о непонятках. [папка автозагрузки] - что с этим нужно делать, я так и не понял. Оно вообще никак не проявляется при работе скрипта - просто путь мне выводит, как оно есть для всех пользователей (ну, это понятно). Далее.
По идее, MsgBox [папка автозагрузки] мы заменяем своим действием - пусть будет создание ярлыка. Но я не знаю, как создавать ярлыки!
Хорошо, если заменить создание ярлыка копированием, то...
Как это будет выглядеть?

Код:
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile "C:\Windows\Clear.lnk", "[папка автозагрузки]\" , true  

Далее я иссяк
 
Добавлено:
У, блиннн!!! Самое "сладкое" на потом оставили
 
Добавлено:
Вот такой гибрид ужа с ежом не сработал, что не так - я не знаю:

Код:
Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = Wscript.CreateObject("Wscript.Shell")
[папка автозагрузки] = objShell.SpecialFolders.Item("AllUsersStartup")
'MsgBox [папка автозагрузки]  
fso.CopyFile "C:\Windows\Clear.lnk", "[папка автозагрузки]\" , true  

 
Добавлено:
Ругается, что не найден путь - моя 5-я строчка. Чего он там не находит - х.з., файл в Windows есть - собственноручно его скопировал.
 
Добавлено:
По поводу "Создать ярлык.vbs" - хороший пример, хрестоматийный. Но... именно, что хрестоматийный - вопросов оставляет больше, чем ответов. Мне бы конкретную реализацию, с комментариями. А пока... Пока припоминается, что я видел нечто подобное - возможно, даже в моём "репозитории" есть. Но вот как использовать - загадка!

Всего записей: 1102 | Зарегистр. 11-01-2019 | Отправлено: 15:39 13-11-2019
Открыть новую тему     Написать ответ в эту тему

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