亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > VBScript > 正文

用VBS寫的VBSCRIPT代碼格式化工具VbsBeautifier

2020-07-26 11:45:43
字體:
來源:轉載
供稿:網友

昨天在VBS吧看到一個精華帖《VBS代碼格式化工具》,是用C++寫的,區區VBS代碼格式化,就不要勞C++大駕了吧,用VBS實現VBS代碼格式化工具不是更自然么?

網上的VBS代碼大部分都沒有縮進,新手不知道要縮進,高手縮進了被某些個垃圾網站采集以后也就沒有了縮進,還有以一些博客貼吧也會把縮進給吃掉。除了縮進之外,由于學VBS的大部分都是學批處理出身,代碼風格還是跟寫批處理一樣難看。其實一般情況下用VbsEdit 5.2.4.0自帶的代碼格式化功能就行了,沒有必要重復造輪子。只不過VbsEdit 5.2.4.0在格式化帶有冒號的代碼時不是很理想,加上我已經很久沒有寫過像樣的VBS腳本了,所以還是決定造一下輪子。

2011年12月27日更新:在線VBScript代碼格式化工具VbsBeautifier

因為代碼比較長,所以貼在文章的最后,下面是VBS代碼格式化工具的效果演示:

格式化前的VBS代碼:

復制代碼 代碼如下:

ON ERROR RESUME NEXT:Set fso = CreateObject("Scripting.FileSystemObject"):X=0:T=true:WhiLe T
Input=Inputbox("Filename Lowercase Batch Convertor"&vbcrlf&vbcrlf& _
"Please input the destination folder name. e.g. C:/Webmaster"&vbcrlf&vbcrlf& _
"Note: Do NOT add '/' in the end of folder name!","FLowercase Convertor","C:/")
iF Input="" then:Msgbox"Folder name is empty!",48,"Error!":T=true:else T=false:end If:wend
Msgbox"All files names of "&Input&" will be converted to lowercase now...",64,"Note"
fold(Input):Msgbox"Done! Total "&X&" file(s) were converted to lowercase.",64,"Done"
sub fold(Path):SET f=fso.GetFolder(Path):Set rf = fso.GetFolder(Path).files:Set fc = f.SubFolders
foR EACh fff in rf:lcf1=LCase(fso.GetAbsolutePathName(fff))
fso.MoveFile fff, lcf1:X=X + 1:next:for EacH f1 in fc:fold(f1)
Set file=fso.GetFolder(f1).files:fOR EACh ff iN file:lcf=LCase(fso.GetAbsolutePathName(ff))
fso.MoveFile ff,lcf:NEXT:NEXT:END sub

格式化后的VBS代碼:

On Error Resume NextSet fso = CreateObject("Scripting.FileSystemObject")X = 0T = TrueWhile T  Input = InputBox("Filename Lowercase Batch Convertor" & vbCrLf & vbCrLf & _  "Please input the destination folder name. e.g. C:/Webmaster" & vbCrLf & vbCrLf & _  "Note: Do NOT add '/' in the end of folder name!","FLowercase Convertor","C:/")  If Input = "" Then    MsgBox"Folder name is empty!",48,"Error!"    T = True  Else T = False  End IfWEndMsgBox"All files names of " & Input & " will be converted to lowercase now...",64,"Note"fold(Input)MsgBox"Done! Total " & X & " file(s) were converted to lowercase.",64,"Done"Sub fold(Path)  Set f = fso.GetFolder(Path)  Set rf = fso.GetFolder(Path).files  Set fc = f.SubFolders  For Each fff In rf    lcf1 = LCase(fso.GetAbsolutePathName(fff))    fso.MoveFile fff, lcf1    X = X + 1  Next  For Each f1 In fc    fold(f1)    Set file = fso.GetFolder(f1).files    For Each ff In file      lcf = LCase(fso.GetAbsolutePathName(ff))      fso.MoveFile ff,lcf    Next  NextEnd Sub

VBS代碼格式化工具的源碼:

Option ExplicitIf WScript.Arguments.Count = 0 Then  MsgBox "請將要格式化的代碼文件拖動到這個文件上", vbInformation, "使用方法"  WScript.QuitEnd If'作者: Demon'時間: 2011/12/24'鏈接: http://demon.tw/my-work/vbs-beautifier.html'描述: VBScript 代碼格式化工具'注意: '1. 錯誤的 VBScript 代碼不能被正確地格式化'2. 代碼中不能含有%[comment]% %[quoted]%等模板標簽, 有待改進'3. 由2可知, 該工具不能格式化自身Dim Beautifier, iSet Beautifier = New VbsBeautifierFor Each i In WScript.Arguments  Beautifier.BeautifyFile iNextMsgBox "代碼格式化完成", vbInformation, "提示"Class VbsBeautifier  'VbsBeautifier類  Private quoted, comments, code, indents  Private ReservedWord, BuiltInFunction, BuiltInConstants, VersionInfo  '公共方法  '格式化字符串  Public Function Beautify(ByVal input)    code = input    code = Replace(code, vbCrLf, vbLf)    Call GetQuoted()    Call GetComments()    Call GetErrorHandling()    Call ColonToNewLine()    Call FixSpaces()    Call ReplaceReservedWord()    Call InsertIndent()    Call FixIndent()    Call PutErrorHandling()    Call PutComments()    Call PutQuoted()    code = Replace(code, vbLf, vbCrLf)    code = VersionInfo & code    Beautify = code  End Function  '公共方法  '格式化文件  Public Function BeautifyFile(ByVal path)    Dim fso    Set fso = CreateObject("scripting.filesystemobject")    BeautifyFile = Beautify(fso.OpenTextFile(path).ReadAll)    '備份文件以免出錯    fso.GetFile(path).Copy path & ".bak", True    fso.OpenTextFile(path, 2, True).Write(BeautifyFile)  End Function  Private Sub Class_Initialize()    '保留字    ReservedWord = "And As Boolean ByRef Byte ByVal Call Case Class Const Currency Debug Dim Do Double Each Else ElseIf Empty End EndIf Enum Eqv Event Exit Explicit False For Function Get Goto If Imp Implements In Integer Is Let Like Long Loop LSet Me Mod New Next Not Nothing Null On Option Optional Or ParamArray Preserve Private Property Public RaiseEvent ReDim Rem Resume RSet Select Set Shared Single Static Stop Sub Then To True Type TypeOf Until Variant WEnd While With Xor"    '內置函數    BuiltInFunction = "Abs Array Asc Atn CBool CByte CCur CDate CDbl CInt CLng CSng CStr Chr Cos CreateObject Date DateAdd DateDiff DatePart DateSerial DateValue Day Escape Eval Exp Filter Fix FormatCurrency FormatDateTime FormatNumber FormatPercent GetLocale GetObject GetRef Hex Hour InStr InStrRev InputBox Int IsArray IsDate IsEmpty IsNull IsNumeric IsObject Join LBound LCase LTrim Left Len LoadPicture Log Mid Minute Month MonthName MsgBox Now Oct Randomize RGB RTrim Replace Right Rnd Round ScriptEngine ScriptEngineBuildVersion ScriptEngineMajorVersion ScriptEngineMinorVersion Second SetLocale Sgn Sin Space Split Sqr StrComp StrReverse String Tan Time TimeSerial TimeValue Timer Trim TypeName UBound UCase Unescape VarType Weekday WeekdayName Year"    '內置常量    BuiltInConstants = "vbBlack vbRed vbGreen vbYellow vbBlue vbMagenta vbCyan vbWhite vbBinaryCompare vbTextCompare vbSunday vbMonday vbTuesday vbWednesday vbThursday vbFriday vbSaturday vbUseSystemDayOfWeek vbFirstJan1 vbFirstFourDays vbFirstFullWeek vbGeneralDate vbLongDate vbShortDate vbLongTime vbShortTime vbObjectError vbOKOnly vbOKCancel vbAbortRetryIgnore vbYesNoCancel vbYesNo vbRetryCancel vbCritical vbQuestion vbExclamation vbInformation vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 vbDefaultButton4 vbApplicationModal vbSystemModal vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo vbCr vbCrLf vbFormFeed vbLf vbNewLine vbNullChar vbNullString vbTab vbVerticalTab vbUseDefault vbTrue vbFalse vbEmpty vbNull vbInteger vbLong vbSingle vbDouble vbCurrency vbDate vbString vbObject vbError vbBoolean vbVariant vbDataObject vbDecimal vbByte vbArray WScript"    '版本信息    VersionInfo = Chr(39) & Chr(86) & Chr(98) & Chr(115) & Chr(66) & Chr(101) & Chr(97) & Chr(117) & Chr(116) & Chr(105) & Chr(102) & Chr(105) & Chr(101) & Chr(114) & Chr(32) & Chr(49) & Chr(46) & Chr(48) & Chr(32) & Chr(98) & Chr(121) & Chr(32) & Chr(68) & Chr(101) & Chr(109) & Chr(111) & Chr(110) & Chr(13) & Chr(10) & Chr(39) & Chr(104) & Chr(116) & Chr(116) & Chr(112) & Chr(58) & Chr(47) & Chr(47) & Chr(100) & Chr(101) & Chr(109) & Chr(111) & Chr(110) & Chr(46) & Chr(116) & Chr(119) & Chr(13) & Chr(10)    '縮進大小    Set indents = CreateObject("scripting.dictionary")    indents("if") = 1    indents("sub") = 1    indents("function") = 1    indents("property") = 1    indents("for") = 1    indents("while") = 1    indents("do") = 1    indents("for") = 1    indents("select") = 1    indents("with") = 1    indents("class") = 1    indents("end") = -1    indents("next") = -1    indents("loop") = -1    indents("wend") = -1  End Sub  Private Sub Class_Terminate()    '什么也不做  End Sub  '將字符串替換成%[quoted]%  Private Sub GetQuoted()    Dim re    Set re = New RegExp    re.Global = True    re.Pattern = """.*?"""    Set quoted = re.Execute(code)    code = re.Replace(code, "%[quoted]%")  End Sub  '將%[quoted]%替換回字符串  Private Sub PutQuoted()    Dim i    For Each i In quoted      code = Replace(code, "%[quoted]%", i, 1, 1)    Next  End Sub  '將注釋替換成%[comment]%  Private Sub GetComments()    Dim re    Set re = New RegExp    re.Global = True    re.Pattern = "'.*"    Set comments = re.Execute(code)    code = re.Replace(code, "%[comment]%")  End Sub  '將%[comment]%替換回注釋  Private Sub PutComments()    Dim i    For Each i In comments      code = Replace(code, "%[comment]%", i, 1, 1)    Next  End Sub  '將冒號替換成換行  Private Sub ColonToNewLine    code = Replace(code, ":", vbLf)  End Sub  '將錯誤處理語句替換成模板標簽  Private Sub GetErrorHandling()    Dim re    Set re = New RegExp    re.Global = True    re.IgnoreCase = True    re.Pattern = "on/s+error/s+resume/s+next"    code = re.Replace(code, "%[resumenext]%")    re.Pattern = "on/s+error/s+goto/s+0"    code = re.Replace(code, "%[gotozero]%")  End Sub  '將模板標簽替換回錯誤處理語句  Private Sub PutErrorHandling()    code = Replace(code, "%[resumenext]%", "On Error Resume Next")    code = Replace(code, "%[gotozero]%", "On Error GoTo 0")  End Sub  '格式化空格  Private Sub FixSpaces()    Dim re    Set re = New RegExp    re.Global = True    re.IgnoreCase = True    re.MultiLine = True    '去掉每行前后的空格    re.Pattern = "^[ /t]*(.*?)[ /t]*$"    code = re.Replace(code, "$1")    '在操作符前后添加空格    re.Pattern = "[ /t]*(=|<|>|-|/+|&|/*|/|/^|//)[ /t]*"    code = re.Replace(code, " $1 ")    '去掉<>中間的空格    re.Pattern = "[ /t]*</s*>[ /t]*"    code = re.Replace(code, " <> ")    '去掉<=中間的空格    re.Pattern = "[ /t]*</s*=[ /t]*"    code = re.Replace(code, " <= ")    '去掉>=中間的空格    re.Pattern = "[ /t]*>/s*=[ /t]*"    code = re.Replace(code, " >= ")    '在行尾的 _ 前面加上空格    re.Pattern = "[ /t]*_[ /t]*$"    code = re.Replace(code, " _")    '去掉Do While中間多余的空格    re.Pattern = "[ /t]*Do/s*While[ /t]*"    code = re.Replace(code, "Do While")    '去掉Do Until中間多余的空格    re.Pattern = "[ /t]*Do/s*Until[ /t]*"    code = re.Replace(code, "Do Until")    '去掉End Sub中間多余的空格    re.Pattern = "[ /t]*End/s*Sub[ /t]*"    code = re.Replace(code, "End Sub")    '去掉End Function中間多余的空格    re.Pattern = "[ /t]*End/s*Function[ /t]*"    code = re.Replace(code, "End Function")    '去掉End If中間多余的空格    re.Pattern = "[ /t]*End/s*If[ /t]*"    code = re.Replace(code, "End If")    '去掉End With中間多余的空格    re.Pattern = "[ /t]*End/s*With[ /t]*"    code = re.Replace(code, "End With")    '去掉End Select中間多余的空格    re.Pattern = "[ /t]*End/s*Select[ /t]*"    code = re.Replace(code, "End Select")    '去掉Select Case中間多余的空格    re.Pattern = "[ /t]*Select/s*Case[ /t]*"    code = re.Replace(code, "Select Case ")  End Sub  '將保留字 內置函數 內置常量 替換成首字母大寫  Private Sub ReplaceReservedWord()    Dim re, words, word    Set re = New RegExp    re.Global = True    re.IgnoreCase = True    re.MultiLine = True    words = Split(ReservedWord, " ")    For Each word In words      re.Pattern = "(/b)" & word & "(/b)"      code = re.Replace(code, "$1" & word & "$2")    Next    words = Split(BuiltInFunction, " ")    For Each word In words      re.Pattern = "(/b)" & word & "(/b)"      code = re.Replace(code, "$1" & word & "$2")    Next    words = Split(BuiltInConstants, " ")    For Each word In words      re.Pattern = "(/b)" & word & "(/b)"      code = re.Replace(code, "$1" & word & "$2")    Next  End Sub  '插入縮進  Private Sub InsertIndent()    Dim lines, line, i, n, t, delta    lines = Split(code, vbLf)    n = UBound(lines)    For i = 0 To n      line = lines(i)      SingleLineIfThen line      t = delta      delta = delta + CountDelta(line)      If t <= delta Then        lines(i) = String(t, vbTab) & lines(i)      Else        lines(i) = String(delta, vbTab) & lines(i)      End If    Next    code = Join(lines, vbLf)  End Sub  '調整錯誤的縮進  Private Sub FixIndent()    Dim lines, i, n, re    Set re = New RegExp    re.IgnoreCase = True    lines = Split(code, vbLf)    n = UBound(lines)    For i = 0 To n      re.Pattern = "^/t*else"      If re.Test(lines(i)) Then        lines(i) = Replace(lines(i), vbTab, "", 1, 1)      End If    Next    code = Join(lines, vbLf)  End Sub  '計算縮進大小  Private Function CountDelta(ByRef line)    Dim i, re, delta    Set re = New RegExp    re.Global = True    re.IgnoreCase = True    For Each i In indents.Keys      re.Pattern = "^/s*/b" & i & "/b"      If re.Test(line) Then        '方便調試        'WScript.Echo line        line = re.Replace(line, "")        delta = delta + indents(i)      End If    Next    CountDelta = delta  End Function  '處理單行的If Then  Private Sub SingleLineIfThen(ByRef line)    Dim re    Set re = New RegExp    re.IgnoreCase = True    re.Pattern = "if.*?then.+"    line = re.Replace(line, "")    '去掉Private Public前綴    re.Pattern = "(private|public).+?(sub|function|property)"    line = re.Replace(line, "$2")  End SubEnd Class'Demon, 于2011年平安夜

來源:http://demon.tw/my-work/vbs-beautifier.html

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品美女免费| 国产中文欧美精品| 日韩免费观看av| 久久视频在线免费观看| 日韩欧美成人免费视频| 亚洲一区二区三区sesese| 国产精品久久久av久久久| 一本色道久久88精品综合| 国产精品美女久久| 国产第一区电影| 欧美丝袜一区二区三区| 日韩视频免费看| 久久噜噜噜精品国产亚洲综合| 日韩**中文字幕毛片| 爽爽爽爽爽爽爽成人免费观看| 自拍偷拍亚洲欧美| xxx欧美精品| 欧美亚洲午夜视频在线观看| 欧美在线视频免费观看| 国产91色在线免费| 91久久精品美女高潮| 国产视频欧美视频| 中文字幕日韩有码| 亚洲激情在线观看| 色噜噜狠狠色综合网图区| 国产综合色香蕉精品| 欧美激情视频一区二区三区不卡| 久久久电影免费观看完整版| 91精品国产高清| 午夜精品久久久久久久白皮肤| 91精品国产色综合久久不卡98| 亚洲国产精彩中文乱码av| 日韩av一区二区在线| 日韩国产精品视频| 亚洲欧美一区二区三区情侣bbw| 91大神在线播放精品| 国产精品一区av| 2020久久国产精品| 成人黄色在线免费| 黄色成人在线播放| 色偷偷亚洲男人天堂| 国产福利精品在线| 日韩电影免费在线观看中文字幕| 久久伊人精品一区二区三区| 亚洲免费视频网站| 日韩中文字幕免费| 色悠悠久久久久| 人人做人人澡人人爽欧美| 成人www视频在线观看| 亚洲国产精品成人一区二区| 久久中文字幕国产| 2019中文字幕全在线观看| 国产精品精品视频| 久久香蕉频线观| 国产精品日韩在线| 亚洲精品一区二三区不卡| 精品亚洲夜色av98在线观看| 亚洲欧美日韩中文在线制服| 色婷婷综合久久久久中文字幕1| 亚洲成人性视频| 国产精品看片资源| 亚洲一区美女视频在线观看免费| 亚洲精选中文字幕| 岛国av一区二区三区| 国产午夜精品免费一区二区三区| 国内精品久久久久影院 日本资源| 欧美性极品少妇精品网站| 91久久国产精品| 欧美激情三级免费| 欧美一级大片在线免费观看| 中文字幕亚洲无线码在线一区| 成年无码av片在线| 国产精品久久久久久久久久久久久| 中文字幕欧美日韩在线| 在线亚洲午夜片av大片| 久久综合亚洲社区| 97色在线播放视频| 久久99精品视频一区97| 日本三级久久久| 亚洲欧美国产制服动漫| 国产精品女主播视频| 亚洲人成77777在线观看网| 国产日韩亚洲欧美| 久久久国产成人精品| 成人性生交大片免费看视频直播| 九九精品视频在线| 少妇高潮久久久久久潘金莲| 久久人人爽人人爽人人片av高清| 亚洲成人网av| 亚洲男人av在线| 国产精品狠色婷| 亚洲精品动漫100p| 欧美日韩国产一区中文午夜| 亚洲天堂久久av| 国产亚洲欧美一区| 欧美色xxxx| 另类图片亚洲另类| 亚洲色图35p| 色噜噜久久综合伊人一本| 欧美亚洲午夜视频在线观看| 中文字幕国产精品久久| 国产在线播放91| 少妇高潮 亚洲精品| 精品久久久久久亚洲精品| 欧美日韩一二三四五区| 青青久久av北条麻妃海外网| 久久久精品久久久久| www.亚洲一区| 国产日韩欧美影视| 亚洲精品小视频在线观看| 国产精品av免费在线观看| 91视频九色网站| 97久久精品人搡人人玩| 久久久久久久国产精品| 中文字幕日韩精品在线| 亚洲欧美另类自拍| 欧美视频二区36p| 日韩av有码在线| 欧美最猛性xxxxx免费| 亚洲sss综合天堂久久| 欧美精品久久久久久久免费观看| 亚洲最大中文字幕| 日韩成人中文电影| 精品福利一区二区| 欧美精品日韩www.p站| 国产精品偷伦视频免费观看国产| 两个人的视频www国产精品| 一本大道亚洲视频| 成人黄色影片在线| 亚洲自拍偷拍区| 久久这里只有精品99| 成人字幕网zmw| 成人性生交大片免费观看嘿嘿视频| 北条麻妃一区二区三区中文字幕| 日本久久久久久久久| 亚洲成av人片在线观看香蕉| 国产精品爱啪在线线免费观看| 欧美大尺度激情区在线播放| 国模视频一区二区三区| 中文字幕亚洲一区二区三区五十路| 欧美精品在线视频观看| 69久久夜色精品国产7777| 亚洲aa中文字幕| 亚洲欧美日韩另类| 亚洲在线视频观看| 欧美成年人网站| 欧美日韩国产二区| 欧美日韩国产综合视频在线观看中文| 懂色aⅴ精品一区二区三区蜜月| 国外色69视频在线观看| 亚洲a在线观看| 成人精品一区二区三区电影免费| 亚洲成色777777女色窝| 国产精品男人的天堂| 久久久精品一区二区| 在线观看精品国产视频| 亚洲成人aaa| 久久久久久久久久久网站| 国产一区二区成人| 日韩精品视频三区| 欧美专区福利在线| 91香蕉亚洲精品| 国产精品影院在线观看| 国产女人18毛片水18精品|