|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Конвертирование Bat и Cmd скриптов в Vbs |
|
VBS/WSH/JS - [решено] Конвертирование Bat и Cmd скриптов в Vbs
|
![]() Пользователь Сообщения: 69 |
Всем привет. Долго и нудно искал конвертер Bat или Cmd скриптов в Vbs. На эту тему в интернете практически одни вопросы и ноль ответов.
Нашёл на одном иностранном (китайском) ресурсе vbs скрипт помогающий конвертировать bat и cmd скрипты в скрипт vbs. При первом запуске скрипта предлагается добавить пункт в контекстное меню vbs файлов, на что нужно согласиться, после чего скрипт копирует себя в папку System32 и создает запись в реестре. В целом скрипт со своей задачей справляется, по крайней мере все конвертированные мной скрипты работают... Скрипт Bat2Vbs:
'bat2vbs.vbs by baomaboy
'https://www.jb51.net/article/10652.htm Dim WshSHell,FSO On Error Resume Next Set WshSHell = WScript.CreateObject("WScript.Shell") Set FSO = CreateObject("Scripting.FileSystemObject") Set WinVer = WshSHell.Environment("Process") Set Args = WScript.Arguments CloseTime = 5 FileName = WScript.ScriptName FileFullName = WScript.ScriptFullName FilePath = FSO.GetParentFolderName(FileFullName) InsPath = FSO.GetSpecialFolder(1) InsFullName = FSO.BuildPath(InsPath ,FileName) LnkPathNT = WshSHell.SpecialFolders(2) LnkPath9X = WshSHell.SpecialFolders(14) LnkPathAll = WshSHell.SpecialFolders("SendTo") OtherFileName="Manage_New.txt" OtherFilePath=FSO.GetSpecialFolder(2) TemFileName="Без названия" TemFilePath=FSO.GetSpecialFolder(2) Copyright="Linglong Technology" InsTitle="Bat2Vbs" InsAnswer="Bat2Vbs..." RegPath1="HKEY_CLASSES_ROOT\batfile\shell\BatToVbs\" RegValue1="Конвертировать в vbs скрипт" RegForm1="REG_SZ" RegPath2="HKEY_CLASSES_ROOT\batfile\shell\BatToVbs\command\" RegValue2="wscript.exe " & chr(34) & InsFullName & chr(34) & " " & chr(34) & "%L" & chr(34) RegForm2="REG_SZ" IF FileFullName <> InsFullName then intAnswer = MsgBox("[Да] - "+"Добавить в контекстное меню vbs файлов."&Chr(10)&Chr(10)&"[Нет] - "+"Удалить из контекстного меню vbs файлов.", vbQuestion + vbYesNoCancel, "Установка конвертера "+ InsAnswer) If intAnswer = vbYes Then WshSHell.RegWrite RegPath1,RegValue1,RegForm1 WshSHell.RegWrite RegPath2,RegValue2,RegForm2 FSO.GetFile(FileFullName).Copy(InsFullName) WshSHell.popup _ "Добавлен файл сценария:"+chr(10)+InsFullName+chr(10)+chr(10)+ _ "Добавлен раздел реестра:"+chr(10)+chr(34)+ RegPath1 +chr(34)+chr(10)+ _ chr(10) & " Это окно закроется автоматически через несколько секунд!" +chr(10)+chr(10)+ _ chr(10) & "Copyright(C) " + Copyright _ , CloseTime, "Установка - "+ InsAnswer, 0 + 64 end if If intAnswer = vbNo Then WshSHell.RegDelete RegPath2 WshSHell.RegDelete RegPath1 FSO.DeleteFile InsFullName WshSHell.popup _ "Удален файл сценария:"+chr(10)+InsFullName+chr(10)+chr(10)+ _ "Удален раздел реестра:"+chr(10)+chr(34)+ RegPath1 +chr(34)+chr(10)+ _ chr(10) & " Это окно закроется автоматически через несколько секунд!" +chr(10)+chr(10)+ _ chr(10) & "Copyright(C) " + Copyright _ , CloseTime, "Удаление - "+ InsAnswer, 0 + 64 end if If intAnswer = vbCancel Then end if ELSE if Args.count=0 then wscript.quit Set ReadFile = FSO.OpenTextFile(Args(0), 1) ReadAllText = ReadFile.ReadAll ReadFile.Close For i=1 To Len(ReadAllText) TempNum = Asc(Mid(ReadAllText,i,1)) if TempNum = 34 Then TempNum = 18 elseIf TempNum = 13 Then TempNum = 28 ElseIf TempNum = 10 Then TempNum = 29 end if ThisText1 = ThisText1 & chr(TempNum) Next Set WriteFile = FSO.OpenTextFile(Args(0)&".vbs",2,True) WriteFile.WriteLine("On Error Resume Next:Dim WshSHell,FSO,Bat2Vbs:Set WshSHell = WScript.CreateObject(""WScript.Shell""):Set FSO = CreateObject(""Scripting.FileSystemObject""):Bat2Vbs="""& ThisText1 &"""") WriteFile.WriteLine("Execute(""For i=1 To Len(Bat2Vbs)""&vbCrLf&""TempNum = Asc(Mid(Bat2Vbs,i,1))""&vbCrLf&""If TempNum = 28 Then""&vbCrLf&""TempNum = 13""&vbCrLf&""ElseIf TempNum = 29 Then""&vbCrLf&""TempNum = 10""&vbCrLf&""elseif TempNum=18 Then""&vbCrLf&""TempNum = 34""&vbCrLf&""End If""&vbCrLf&""ThisText2 = ThisText2 & chr(TempNum)""&vbCrLf&""Next"")") WriteFile.WriteLine("Set BatFile = FSO.OpenTextFile(FSO.BuildPath(FSO.GetSpecialFolder(2),""Temp.bat""),2,True):BatFile.WriteLine(ThisT ext2):BatFile.Close:WshSHell.Run ""%Comspec% /C ""&FSO.BuildPath(FSO.GetSpecialFolder(2),""Temp.bat""),1,false") WriteFile.Close end if Set WshSHell = Nothing Set FSO = Nothing Set Args = Nothing WScript.Quit(0) Скрипт Cmd2Vbs:
Dim WshSHell,FSO
On Error Resume Next Set WshSHell = WScript.CreateObject("WScript.Shell") Set FSO = CreateObject("Scripting.FileSystemObject") Set WinVer = WshSHell.Environment("Process") Set Args = WScript.Arguments CloseTime = 5 FileName = WScript.ScriptName FileFullName = WScript.ScriptFullName FilePath = FSO.GetParentFolderName(FileFullName) InsPath = FSO.GetSpecialFolder(1) InsFullName = FSO.BuildPath(InsPath ,FileName) LnkPathNT = WshSHell.SpecialFolders(2) LnkPath9X = WshSHell.SpecialFolders(14) LnkPathAll = WshSHell.SpecialFolders("SendTo") OtherFileName="Manage_New.txt" OtherFilePath=FSO.GetSpecialFolder(2) TemFileName="Без названия" TemFilePath=FSO.GetSpecialFolder(2) Copyright="Linglong Technology" InsTitle="Cmd2Vbs" InsAnswer="Cmd2Vbs..." RegPath1="HKEY_CLASSES_ROOT\Cmdfile\shell\CmdToVbs\" RegValue1="Конвертировать в vbs скрипт" RegForm1="REG_SZ" RegPath2="HKEY_CLASSES_ROOT\Cmdfile\shell\CmdToVbs\command\" RegValue2="wscript.exe " & chr(34) & InsFullName & chr(34) & " " & chr(34) & "%L" & chr(34) RegForm2="REG_SZ" IF FileFullName <> InsFullName then intAnswer = MsgBox("[Да] - "+"Добавить в контекстное меню vbs файлов."&Chr(10)&Chr(10)&"[Нет] - "+"Удалить из контекстного меню vbs файлов.", vbQuestion + vbYesNoCancel, "Установка конвертера "+ InsAnswer) If intAnswer = vbYes Then WshSHell.RegWrite RegPath1,RegValue1,RegForm1 WshSHell.RegWrite RegPath2,RegValue2,RegForm2 FSO.GetFile(FileFullName).Copy(InsFullName) WshSHell.popup _ "Добавлен файл сценария:"+chr(10)+InsFullName+chr(10)+chr(10)+ _ "Добавлен раздел реестра:"+chr(10)+chr(34)+ RegPath1 +chr(34)+chr(10)+ _ chr(10) & " Это окно закроется автоматически через несколько секунд!" +chr(10)+chr(10)+ _ chr(10) & "Copyright(C) " + Copyright _ , CloseTime, "Установка - "+ InsAnswer, 0 + 64 end if If intAnswer = vbNo Then WshSHell.RegDelete RegPath2 WshSHell.RegDelete RegPath1 FSO.DeleteFile InsFullName WshSHell.popup _ "Удален файл сценария:"+chr(10)+InsFullName+chr(10)+chr(10)+ _ "Удален раздел реестра:"+chr(10)+chr(34)+ RegPath1 +chr(34)+chr(10)+ _ chr(10) & " Это окно закроется автоматически через несколько секунд!" +chr(10)+chr(10)+ _ chr(10) & "Copyright(C) " + Copyright _ , CloseTime, "Удаление - "+ InsAnswer, 0 + 64 end if If intAnswer = vbCancel Then end if ELSE if Args.count=0 then wscript.quit Set ReadFile = FSO.OpenTextFile(Args(0), 1) ReadAllText = ReadFile.ReadAll ReadFile.Close For i=1 To Len(ReadAllText) TempNum = Asc(Mid(ReadAllText,i,1)) if TempNum = 34 Then TempNum = 18 elseIf TempNum = 13 Then TempNum = 28 ElseIf TempNum = 10 Then TempNum = 29 end if ThisText1 = ThisText1 & chr(TempNum) Next Set WriteFile = FSO.OpenTextFile(Args(0)&".vbs",2,True) WriteFile.WriteLine("On Error Resume Next:Dim WshSHell,FSO,Cmd2Vbs:Set WshSHell = WScript.CreateObject(""WScript.Shell""):Set FSO = CreateObject(""Scripting.FileSystemObject""):Cmd2Vbs="""& ThisText1 &"""") WriteFile.WriteLine("Execute(""For i=1 To Len(Cmd2Vbs)""&vbCrLf&""TempNum = Asc(Mid(Cmd2Vbs,i,1))""&vbCrLf&""If TempNum = 28 Then""&vbCrLf&""TempNum = 13""&vbCrLf&""ElseIf TempNum = 29 Then""&vbCrLf&""TempNum = 10""&vbCrLf&""elseif TempNum=18 Then""&vbCrLf&""TempNum = 34""&vbCrLf&""End If""&vbCrLf&""ThisText2 = ThisText2 & chr(TempNum)""&vbCrLf&""Next"")") WriteFile.WriteLine("Set CmdFile = FSO.OpenTextFile(FSO.BuildPath(FSO.GetSpecialFolder(2),""Temp.Cmd""),2,True):CmdFile.WriteLine(ThisT ext2):CmdFile.Close:WshSHell.Run ""%Comspec% /C ""&FSO.BuildPath(FSO.GetSpecialFolder(2),""Temp.Cmd""),1,false") WriteFile.Close end if Set WshSHell = Nothing Set FSO = Nothing Set Args = Nothing WScript.Quit(0) |
|
Отправлено: 20:34, 18-12-2018 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать Ну и первым сообщением темы будет моё...
Задумал я интегрировать сие изобретение в свой загрузочный образ Windows 7. И тут я столкнулся с небольшой проблемкой, а именно, проблема в том что скрипт создает себе запись ([HKEY_CLASSES_ROOT\batfile\shell\BatToVbs]) в реестре, в которой указывает путь к файлу Bat2Exe.vbs в следующем виде: wscript.exe "C:\Windows\System32\Bat2Vbs.vbs" "%L". В таком виде все работает нормально, но не всегда система устанавливается на диск "C:\". Я решил вместо буквы диска указать системную переменную "%SystemRoot%", запись сделал такую: "wscript.exe "%SystemRoot%\system32\Cmd2Vbs.vbs" "%L"" , но тут дело не пошло. То ошибка, что не найден wscript.exe, то не найден конвертируемый файл, но суть не в этом, с этим думаю разберусь. Нужно в общем переделать выложенные выше скрипты, чтобы они не предлагали услуг по интеграции в систему, а только конвертировали переданный им файл. В скриптах vbs вообще не варю, поэтому прошу помощи у знающих это дело... |
Отправлено: 21:04, 18-12-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Alex S, с чего бы такому конвертеру взяться?!
Option Explicit нет. Никак не обрабатываемый «On Error Resume Next». Дальше следует индусский код в исполнении вязанки из китайских иероглифов. И, наконец, никакой конвертации нет и в помине — содержимое пакетного файла тупо (и криво к тому же) сохраняется в строчную переменную, при исполнении такого, с позволения сказать, якобы «конвертированного скрипта» эта строка столь же тупо записывается в созданный во временном каталоге пакетный файл, который и запускается на исполнение с непредсказуемыми последствиями. Само собой, созданный пакетный файл не удаляется ![]() Одним словом коллега, это банальный китайский разводняк Больших Белых Бвана. |
Отправлено: 22:16, 18-12-2018 | #3 |
![]() Новый участник Сообщения: 13
|
Профиль | Отправить PM | Цитировать Как пользоваться то этими скриптами, кроме того, что создать файлы VBS, изменить кодировку на юникод и интегрировать в контекстное меню, что дальше то делать? В контестном меню никаких пунктов от этого не появилось.
|
Отправлено: 20:27, 08-04-2021 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата EVGA:
|
||
Отправлено: 23:12, 08-04-2021 | #5 |
fascinating rhythm Сообщения: 6654
|
Профиль | Отправить PM | Цитировать А смысл такой конвертации?
|
------- Отправлено: 09:41, 09-04-2021 | #6 |
![]() Новый участник Сообщения: 13
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
|
|
Отправлено: 16:18, 09-04-2021 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать EVGA, это не «конвертер VBS в cmd» (как хотите Вы). И не «конвертер cmd в VBS» (как пишет автор темы). Ни то, ни то. Совсем. Ни разу. Так понятно?
|
Отправлено: 17:11, 09-04-2021 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - управление сигналом DTR на COM порте - реализация bat\cmd или vbs (а лучше c++) | anatolysn | Скриптовые языки администрирования Windows | 6 | 26-09-2017 20:46 | |
CMD/BAT - CMD/BAT Поиск по каталогам файлов bat и конвертирование их в JPEG | freerider1989 | Скриптовые языки администрирования Windows | 1 | 18-04-2016 08:37 | |
Любой язык - [решено] CMD/BAT+VBS завершение процессов | dinis.grek | Скриптовые языки администрирования Windows | 6 | 14-07-2014 07:25 | |
CMD/BAT - Вопросы по написанию скриптов на CMD/BAT | kelevara | Тест-форум | 1 | 26-04-2013 15:03 | |
Любой язык - [архив] Нужна помощь в написании BAT | CMD | VBS | WSH файлов | 0bject | Скриптовые языки администрирования Windows | 614 | 19-01-2009 21:58 |
|