Войти

Показать полную графическую версию : [решено] Конвертирование Bat и Cmd скриптов в Vbs


Alex S
18-12-2018, 20:34
Всем привет. Долго и нудно искал конвертер Bat или Cmd скриптов в Vbs. На эту тему в интернете практически одни вопросы и ноль ответов.
Нашёл на одном иностранном (китайском) ресурсе vbs скрипт помогающий конвертировать bat и cmd скрипты в скрипт vbs.
При первом запуске скрипта предлагается добавить пункт в контекстное меню vbs файлов, на что нужно согласиться, после чего скрипт копирует себя в папку System32 и создает запись в реестре.
В целом скрипт со своей задачей справляется, по крайней мере все конвертированные мной скрипты работают...

'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(ThisText2):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)

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(ThisText2):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)

Alex S
18-12-2018, 21:04
Ну и первым сообщением темы будет моё...

Задумал я интегрировать сие изобретение в свой загрузочный образ 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 вообще не варю, поэтому прошу помощи у знающих это дело...

Iska
18-12-2018, 22:16
Alex S, с чего бы такому конвертеру взяться?!

Option Explicit нет. Никак не обрабатываемый «On Error Resume Next». Дальше следует индусский код в исполнении вязанки из китайских иероглифов. И, наконец, никакой конвертации нет и в помине — содержимое пакетного файла тупо (и криво к тому же) сохраняется в строчную переменную, при исполнении такого, с позволения сказать, якобы «конвертированного скрипта» эта строка столь же тупо записывается в созданный во временном каталоге пакетный файл, который и запускается на исполнение с непредсказуемыми последствиями. Само собой, созданный пакетный файл не удаляется :lol:. В общем, кроме того, что он гадит в реестре — он ничего не делает.

Одним словом коллега, это банальный китайский разводняк Больших Белых Бвана.

EVGA
08-04-2021, 20:27
Как пользоваться то этими скриптами, кроме того, что создать файлы VBS, изменить кодировку на юникод и интегрировать в контекстное меню, что дальше то делать? В контестном меню никаких пунктов от этого не появилось.

Iska
08-04-2021, 23:12
Как пользоваться то этими скриптами… »
EVGA, ими никак не надо пользоваться.

DJ Mogarych
09-04-2021, 09:41
А смысл такой конвертации?

EVGA
09-04-2021, 16:18
А смысл такой конвертации? » Вот мне например иногда нужно понять, что там в VBS написано, изучать уже поздно и незачем, а если бы я мог конвертировать VBS в cmd, то хотя бы примерно понял, что там за команды идут, и попытаться добавить в VBS то, чего мне там не хватает.

Iska
09-04-2021, 17:11
EVGA, это не «конвертер VBS в cmd» (как хотите Вы). И не «конвертер cmd в VBS» (как пишет автор темы). Ни то, ни то. Совсем. Ни разу. Так понятно?




© OSzone.net 2001-2012