|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Нужен специфический скрипт для форума Лечение. |
|
|
CMD/BAT - [решено] Нужен специфический скрипт для форума Лечение.
|
Будем жить, Маэстро... Сообщения: 6694 |
Профиль | Сайт | Отправить PM | Цитировать Привет всем.
В общем навеяно из раздела Лечение - пример. Каждый раз такую рекомендацию давать конечно можно, но обилие "сделайте\сохраните\запустите" путает пользователя. Хочется немного автоматизировать эту рекомендацию в один клик. Хочется не только рабочую версию, но и красоту скрипта. Логика пока такая: 1. Проверить есть ли папка C:\avz4 Если есть 2. Переименовать файл C:\avz4\avz.exe в C:\avz4\active.com Иначе Скачать отсюда - http://z-oleg.com/avz4.zip в корень диска С: и распаковать архив в папку C:\avz4 и также переименовать. 3. Создать текстовый файл script.txt с содержимым и сохранить на диск С: 4. Создать файл .vbs с содержимым и выполнить его set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "taskkill /f /im Explorer.exe", 0 WScript.Sleep 500 WshShell.Run "C:\avz4\active.com AM=Y script=C:\script.txt" @Echo off Set DirAVZ=C:\avz4 del C:\script.txt del C:\SafeZone.vbs ren C:\avz4\avz.exe C:\avz4\active.com Set sScript1=begin Set sScript2= ExecuteStdScr(7); Set sScript3=end. Set sRunVBS1=set WshShell = WScript.CreateObject("WScript.Shell") Set sRunVBS2=WshShell.Run "taskkill /f /im Explorer.exe", 0 Set sRunVBS3=WScript.Sleep 500 Set sRunVBS4=WshShell.Run "C:\avz4\active.com AM=Y script=C:\script.txt" Echo %sScript1%>>C:\script.txt Echo %sScript2%>>C:\script.txt Echo %sScript3%>>C:\script.txt Echo %sRunVBS1%>>C:\SafeZone.vbs Echo %sRunVBS2%>>C:\SafeZone.vbs Echo %sRunVBS3%>>C:\SafeZone.vbs Echo %sRunVBS4%>>C:\SafeZone.vbs If Exist "%DirAVZ%\*.*"( Start C:\SafeZone.vbs ) Else( Echo Папки %systemdrive%\avz4\avz - не найдено!>>C:\log.txt ) exit. Если реально выполнить всё одним скриптом .vbs то это будет здорово. Спасибо |
|
------- Отправлено: 12:04, 08-05-2011 |
Ветеран Сообщения: 1757
|
Два вопроса. Зачем vbs-скрипт и чем скачивать?
@echo off setlocal if not exist "c:\avz4" ( wget http://z-oleg.com/avz4.zip "%programfiles%\7-zip\7z" x avz4.zip -oc:\ del avz4.zip ) ren c:\avz4\avz.exe active.com 1>"c:\script.txt" ( echo begin echo ExecuteStdScr(7^); echo end. ) taskkill /f /im explorer.exe && start C:\avz4\active.com AM=Y script=C:\script.txt |
Последний раз редактировалось Foreigner, 08-05-2011 в 14:13. Отправлено: 13:44, 08-05-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Drongo, для категории CMD/BAT я бы сделал примерно так (для реальной работы заменить «notepad.exe» на «explorer.exe»):
@echo off setlocal enableextensions enabledelayedexpansion set sAVZFolder=%SystemDrive%\avz4 set sAVZNewName=%RANDOM%.%RANDOM% if exist "%sAVZFolder%\." ( copy /y "%sAVZFolder%\avz.exe" "%sAVZFolder%\%sAVZNewName%" 1>nul ( echo var echo sProcessName : string; echo sPath2Process : string; echo. echo begin echo sProcessName := 'notepad.exe'; echo sPath2Process := NormalFileName^('%SystemRoot%\' + sProcessName^); echo. echo TerminateProcessByName^(sProcessName^); echo ExecuteStdScr^(7^); echo. echo if ExecuteFile^(sPath2Process, '', 1, 0, false^) = true then echo ShowMessage^('[' + sPath2Process + '] єёях°эю чряє∙хэ'^) echo else echo ShowMessage^('═х єфрыюё№ чряєёЄшЄ№ [' + sPath2Process + ']'^); echo end. ) 1>"%sAVZFolder%\DrongoScript.txt" "%sAVZFolder%\%sAVZNewName%" AM=Y Run=Y Script="%sAVZFolder%\DrongoScript.txt" del /f /q "%sAVZFolder%\%sAVZNewName%" del /f /q "%sAVZFolder%\DrongoScript.txt" ) else ( echo Папки [%sAVZFolder%] не найдено!>>"%SystemDrive%\DrongoLog.txt" ) endlocal exit /b 0 Вопрос: какова необходимость снятия процесса Проводника именно перед запуском AVZ? В приведённом мною примере я отдал сие на откуп самому AVZ (как и его запуск после выполнения скрипта AVZ). В рамках WSH можно будет попробовать осуществить загрузку с HTTP (и, скорее всего, на этот скрипт будут ругаться антивирусы), и, возможно, распаковку средствами «Shell.Application» — то бишь, самого Проводника. |
Отправлено: 14:52, 08-05-2011 | #3 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Foreigner:
Цитата Foreigner:
Цитата Foreigner:
|
|||
------- Отправлено: 15:03, 08-05-2011 | #4 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата:
Цитата Iska:
|
|||
------- Отправлено: 15:22, 08-05-2011 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Drongo:
Цитата Drongo:
|
||
Отправлено: 16:14, 08-05-2011 | #6 |
Ветеран Сообщения: 1757
|
Цитата Drongo:
|
|
Отправлено: 16:44, 08-05-2011 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Примерно так:
Option Explicit Dim objFSO Dim objShell Dim objWshShell Dim strPath2AVZ Dim strPath2Exe Dim strPath2AVZScript Dim strHttpSource Dim strDownloadDest Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objShell = WScript.CreateObject("Shell.Application") Set objWshShell = WScript.CreateObject("WScript.Shell") strPath2AVZ = "C:\AVZ" strPath2Exe = objFSO.BuildPath(strPath2AVZ, "avz4\avz.exe") strPath2AVZScript = objFSO.BuildPath(strPath2AVZ, "DrongoScript.avz") strHttpSource = "http://z-oleg.com/avz4.zip" strDownloadDest = objFSO.BuildPath(strPath2AVZ, objFSO.GetFileName(strHttpSource)) If Not objFSO.FolderExists(strPath2AVZ) Then objFSO.CreateFolder strPath2AVZ End If If GetFileFromURL(strHttpSource, strDownloadDest) Then ExtractFromZip objFSO.BuildPath(strPath2AVZ, objFSO.GetFileName(strHttpSource)), strPath2AVZ CreateAVZScript strPath2AVZScript RenameAndExecuteProgram strPath2Exe, strPath2AVZScript Else WScript.Echo "Can't download [" & strHttpSource & "] to [" & strDownloadDest & "]" End If Set objWshShell = Nothing Set objShell = Nothing Set objFSO = Nothing WScript.Quit 0 '============================================================================= '============================================================================= Sub CreateAVZScript(strPath2Script) With objFSO.CreateTextFile(strPath2Script, True) .Write _ "var" & vbCrLf & _ " sProcessName : string;" & vbCrLf & _ " sPath2Process : string;" & vbCrLf & _ "" & vbCrLf & _ "begin" & vbCrLf & _ " sProcessName := 'explorer.exe';" & vbCrLf & _ " sPath2Process := NormalFileName('%SystemRoot%\' + sProcessName);" & vbCrLf & _ " " & vbCrLf & _ " TerminateProcessByName(sProcessName);" & vbCrLf & _ " ExecuteStdScr(7);" & vbCrLf & _ " " & vbCrLf & _ " if ExecuteFile(sPath2Process, '', 1, 0, false) = true then" & vbCrLf & _ " ShowMessage('[' + sPath2Process + '] успешно запущен')" & vbCrLf & _ " else" & vbCrLf & _ " ShowMessage('Не удалось запустить [' + sPath2Process + ']');" & vbCrLf & _ "end." & vbCrLf .Close End With End Sub '============================================================================= '============================================================================= Sub RenameAndExecuteProgram(strPath2Exe, strPath2AVZScript) ' Enum WshExecStatus Const WshRunning = 0 Const WshFinished = 1 Const WshFailed = 2 Dim strPath2NewExe strPath2NewExe = objFSO.BuildPath(objFSO.GetParentFolderName(strPath2Exe), objFSO.GetTempName()) objFSO.CopyFile strPath2Exe, strPath2NewExe With objWshShell.Exec("""" & strPath2NewExe & """ AM=Y Run=Y Script=""" & strPath2AVZScript & """") WScript.Sleep 500 If .Status = WshRunning And .Status <> WshFailed Then objWshShell.AppActivate .ProcessID Do WScript.Sleep 100 Loop Until .Status = WshFinished Else WScript.Echo "Can't execute [" & strPath2NewExe & "]" End If End With objFSO.DeleteFile strPath2NewExe, True 'objFSO.DeleteFile strPath2AVZScript, True End Sub '============================================================================= '============================================================================= Function ExtractFromZip(strPath2Zip, strPath2Extract) Dim objFolderZIP Dim objFolderDest Set objFolderZIP = objShell.NameSpace(strPath2Zip) If Not objFolderZIP Is Nothing Then Set objFolderDest = objShell.NameSpace(strPath2Extract) If Not objFolderDest Is Nothing Then objFolderDest.CopyHere objFolderZIP.Items Set objFolderDest = Nothing Else WScript.Echo "Can't get folder [" & strPath2Extract & "]" End If Set objFolderZIP = Nothing Else WScript.Echo "Can't get zip folder [" & strPath2Zip & "]" End If End Function '============================================================================= '============================================================================= Function GetFileFromURL(strURL, strPath) ' Enum ConnectModeEnum Const adModeUnknown = 0 Const adModeRead = 1 Const adModeWrite = 2 Const adModeReadWrite = 3 Const adModeShareDenyRead = 4 Const adModeShareDenyWrite = 8 Const adModeShareExclusive = 12 Const adModeShareDenyNone = 16 Const adModeRecursive = 4194304 ' Enum StreamTypeEnum Const adTypeBinary = 1 Const adTypeText = 2 ' Enum SaveOptionsEnum Const adSaveCreateNotExist = 1 Const adSaveCreateOverWrite = 2 Dim arrContent GetFileFromURL = False With WScript.CreateObject("MSXML2.XMLHTTP") .open "GET", strURL, False .send arrContent = .responseBody End With With WScript.CreateObject("ADODB.Stream") .Mode = adModeReadWrite .Type = adTypeBinary .Open .Write arrContent .SaveToFile strPath, adSaveCreateOverWrite End With If objFSO.FileExists(strPath) Then If objFSO.GetFile(strPath).Size <> 0 Then ' Что-то загружено ;) GetFileFromURL = True End If End If End Function '============================================================================= |
Отправлено: 16:49, 08-05-2011 | #8 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 20:01, 08-05-2011 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Drongo, это:
Цитата Drongo:
У меня без «Run=Y» в процессе разработки скрипт не запускался на исполнение. Сейчас попробовал ручками — скрипт AVZ сработал без «Run=Y». Скопировал тот же скрипт, запустил — скрипт AVZ сработал. Спишу на издержки долго не перезагружавшейся системы, свои кривые «ручки» и забуду… Цитата Drongo:
Не требуется ли что-либо подправить? Какие-нибудь дополнительные проверки? P.S. На текущий момент, я думаю, можно сказать, что AVZ, в принципе, не имеет конкурентов в своей области, и прежде всего — из-за включения в его состав встроенного языка, позволяющего практически неограниченно расширять его функционал и гибко подстраивать на решение конкретных задач по восстановлению работоспособности системы. Встроенный язык — это всегда большой плюс, будь то Microsoft Office, або Far Manager. |
||
Последний раз редактировалось Iska, 09-05-2011 в 03:14. Отправлено: 03:08, 09-05-2011 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - [решено] Нужен скрипт создания общей папки для текущего пользователя в домене | Sergey700 | Скриптовые языки администрирования Windows | 7 | 02-12-2022 16:15 | |
Любой язык - нужен скрипт для удаления всех файлов кроме нужных для запуска Windows XP | Dark Ange1 | Скриптовые языки администрирования Windows | 11 | 07-03-2010 13:34 | |
VBS/WSH/JS - Нужен скрипт для прописания должности юзерам. | dvassilyev | Скриптовые языки администрирования Windows | 2 | 04-08-2009 08:56 | |
[решено] Нужен скрипт для autoit для раскопирования файла | irk72ag | Автоматическая установка приложений | 3 | 19-06-2009 15:27 | |
[решено] Нужен скрипт для отключения всех сессий и открытых файлов | Butunin Klim | Microsoft Windows NT/2000/2003 | 1 | 15-07-2006 01:25 |
|