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)
Нашёл на одном иностранном (китайском) ресурсе 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)