Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Конвертирование Bat и Cmd скриптов в Vbs

Ответить
Настройки темы
VBS/WSH/JS - [решено] Конвертирование Bat и Cmd скриптов в Vbs

Аватара для Alex S

Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем привет. Долго и нудно искал конвертер 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

 

Аватара для Alex S

Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить 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
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Alex S, с чего бы такому конвертеру взяться?!

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

Одним словом коллега, это банальный китайский разводняк Больших Белых Бвана.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:16, 18-12-2018 | #3


Аватара для EVGA

Новый участник


Сообщения: 13
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 20:27, 08-04-2021 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата EVGA:
Как пользоваться то этими скриптами… »
EVGA, ими никак не надо пользоваться.

Отправлено: 23:12, 08-04-2021 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


А смысл такой конвертации?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 09:41, 09-04-2021 | #6


Аватара для EVGA

Новый участник


Сообщения: 13
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
А смысл такой конвертации? »
Вот мне например иногда нужно понять, что там в VBS написано, изучать уже поздно и незачем, а если бы я мог конвертировать VBS в cmd, то хотя бы примерно понял, что там за команды идут, и попытаться добавить в VBS то, чего мне там не хватает.

Отправлено: 16:18, 09-04-2021 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:11, 09-04-2021 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Конвертирование Bat и Cmd скриптов в Vbs

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход