下面代码稍有修改,原结构是脚本与释放的bat同步执行并等待bat执行完毕后删除bat,本意是不遗留临时文件。后来想想通用性不好,比如释放执行的bat文件是个常驻进程的监视类型那VBS也会无休止的等待而无法退出,所以还是改为异步执行,脚本调用bat后自行退出。考虑到还原原文件的完整性末尾添加自删除也打消了想法。压缩包暂未更新。
复制代码 代码如下:
'bat2vbs.vbsbybaomaboy
DimWshSHell,FSO
OnErrorResumeNext
SetWshSHell=WScript.CreateObject("WScript.Shell")
SetFSO=CreateObject("Scripting.FileSystemObject")
SetWinVer=WshSHell.Environment("Process")
SetArgs=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="玲珑科技"
QQ="QQ:25926183"
Email="Email:fty1995@163.com"
InsTitle="Bat2Vbsbybaomaboy"
InsAnswer="Bat2Vbsbybaomaboy"
RegPath1="HKEY_CLASSES_ROOTbatfileshellBatToVbs"
RegValue1="BAT转VBS脚本文件"
RegForm1="REG_SZ"
RegPath2="HKEY_CLASSES_ROOTbatfileshellBatToVbscommand"
RegValue2="wscript.exe"&chr(34)&InsFullName&chr(34)&""&chr(34)&"%L"&chr(34)
RegForm2="REG_SZ"
IFFileFullName<>InsFullNamethen
intAnswer=MsgBox("【是】将“"+InsAnswer+"”加入到右键菜单,"&Chr(10)&Chr(10)&"【否】将“"+InsAnswer+"”从右键菜单删除。",vbQuestion+vbYesNoCancel,"安装-"+InsTitle+"-"+Copyright)
IfintAnswer=vbYesThen
WshSHell.RegWriteRegPath1,RegValue1,RegForm1
WshSHell.RegWriteRegPath2,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)&CloseTime&"秒钟后本窗口将自动关闭!"+chr(10)+chr(10)+_
chr(10)&"Copyright(C)"+Copyright+""&QQ&""+Email_
,CloseTime,"安装成功-"+InsTitle+"-"+Copyright,0+64
endif
IfintAnswer=vbNoThen
WshSHell.RegDeleteRegPath2
WshSHell.RegDeleteRegPath1
FSO.DeleteFileInsFullName
WshSHell.popup_
"删除脚本文件:"+chr(10)+InsFullName+chr(10)+chr(10)+_
"删除注册表项:"+chr(10)+chr(34)+RegPath1+chr(34)+chr(10)+_
chr(10)&CloseTime&"秒钟后本窗口将自动关闭!"+chr(10)+chr(10)+_
chr(10)&"Copyright(C)"+Copyright+""&QQ&""+Email_
,CloseTime,"卸载成功-"+InsTitle+"-"+Copyright,0+64
endif
IfintAnswer=vbCancelThen
endif
ELSE
ifArgs.count=0thenwscript.quit
SetReadFile=FSO.OpenTextFile(Args(0),1)
ReadAllText=ReadFile.ReadAll
ReadFile.Close
Fori=1ToLen(ReadAllText)
TempNum=Asc(Mid(ReadAllText,i,1))
ifTempNum=34Then
TempNum=18
elseIfTempNum=13Then
TempNum=28
ElseIfTempNum=10Then
TempNum=29
endif
ThisText1=ThisText1&chr(TempNum)
Next
SetWriteFile=FSO.OpenTextFile(Args(0)&".VBS",2,True)
WriteFile.WriteLine("OnErrorResumeNext:DimWshSHell,FSO,Bat2Vbs:SetWshSHell=WScript.CreateObject(""WScript.Shell""):SetFSO=CreateObject(""Scripting.FileSystemObject""):Bat2Vbs="""&ThisText1&"""")
WriteFile.WriteLine("Execute(""Fori=1ToLen(Bat2Vbs)""&vbCrLf&""TempNum=Asc(Mid(Bat2Vbs,i,1))""&vbCrLf&""IfTempNum=28Then""&vbCrLf&""TempNum=13""&vbCrLf&""ElseIfTempNum=29Then""&vbCrLf&""TempNum=10""&vbCrLf&""elseifTempNum=18Then""&vbCrLf&""TempNum=34""&vbCrLf&""EndIf""&vbCrLf&""ThisText2=ThisText2&chr(TempNum)""&vbCrLf&""Next"")")
WriteFile.WriteLine("SetBatFile=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
endif
SetWshSHell=Nothing
SetFSO=Nothing
SetArgs=Nothing
WScript.Quit(0)