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

首頁 > 編程 > VBScript > 正文

vbs腳本實現批量轉換文件編碼

2020-06-26 18:38:51
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了vbs腳本實現批量轉換文件編碼,可以批量對文件在Gb2312和UTF-8編碼間互相轉換,需要的朋友可以參考下
 

最近需要使用SourceInsight查看分析在Linux系統下開發的項目代碼,我們知道Linux系統中文本文件默認編碼格式是UTF-8,而Windows中文系統中的默認編碼格式是Gb2312。系統內的編碼格式有所區別倒無傷大雅,關鍵的是SourceInsight竟不支持UTF-8,導致項目代碼內的中文注釋全部亂碼!

既然SourceInsight不支持UTF-8編碼的文件,那我們就得想辦法將UTF-8的代碼文件轉化為GB2312編碼的。首先想到的是到網上搜一下“批量編碼轉換工具”,結果下載后發現編碼轉換后的文件總是出現亂碼,可能是工具的bug吧。既然不能使用工具轉換,那就自己寫一個程序進行編碼轉換,但是細想一下覺得C++/java的編碼轉換程序寫起來又比較啰嗦,要是在Linux下寫一個shell腳本就能輕松搞定了。還好Windows下有vbs腳本可以幫助我們輕松達到這個目的。

復制代碼代碼如下:

'-------------------------------------------------

 

'函數名稱:ReadFile

'作用:利用AdoDb.Stream對象來讀取各種格式的文本文件

'-------------------------------------------------

 

Function ReadFile(FileUrl, CharSet)

    Dim Str

    Set stm = CreateObject("Adodb.Stream")

    stm.Type = 2

    stm.mode = 3

    stm.charset = CharSet

    stm.Open

    stm.loadfromfile FileUrl

    Str = stm.readtext

    stm.Close

    Set stm = Nothing

    ReadFile = Str

End Function

 

我們使用ReadFile函數讀取文件,其中FileUrl指定文件的路徑,CharSet指定文件的原始編碼格式,使用adodb.stream對象讀取文件內容到Str。

復制代碼代碼如下:

'-------------------------------------------------

 

'函數名稱:WriteToFile

'作用:利用AdoDb.Stream對象來寫入各種格式的文本文件

'-------------------------------------------------

 

Function WriteToFile (FileUrl, Str, CharSet)

    Set stm = CreateObject("Adodb.Stream")

    stm.Type = 2

    stm.mode = 3

    stm.charset = CharSet

    stm.Open

    stm.WriteText Str

    stm.SaveToFile FileUrl, 2

    stm.flush

    stm.Close

    Set stm = Nothing

End Function

 

然后使用WriteToFile將Str寫回原文件FileUrl,并設定新的編碼CharSet。

復制代碼代碼如下:

'-------------------------------------------------

 

'函數名稱:ConvertFile

'作用:將一個文件進行編碼轉換

'-------------------------------------------------

 

Function ConvertFile(FileUrl)

    Call WriteToFile(FileUrl, ReadFile(FileUrl, SrcCode), DestCode)

End Function

 

這樣ConvertFile對上述兩個函數封裝,實現文件FileUrl的編碼轉換,其中原始編碼SrcCode與目的編碼DestCode為全局變量。

如果僅對一個文件進行編碼轉換,我們不必這么大費周章。我們希望能對任意的文件或文件夾內的所有文件進行編碼轉換,達到批量轉換的目的。

 

復制代碼代碼如下:
'-------------------------------------------------

 

'函數名稱:ConvertDir

'作用:將任意目錄內的文件進行編碼轉換

'-------------------------------------------------

 

Function ConvertDir(DirUrl)

    If fs.FileExists(DirUrl) Then

       Call ConvertFile(DirUrl)

    Else

       Call SearchDir(DirUrl)

    End If

End Function

 

函數ConvertDir對任意路徑的文件/文件夾進行編碼轉換,使用scripting.filesystemobject對象的FileExists函數判斷路徑對應的是文件還是文件夾,如果是文件則直接調用ConvertFile進行編碼轉換,否則調用SearchDir處理文件夾。

復制代碼代碼如下:

'-------------------------------------------------

 

'函數名稱:SearchDir

'作用:遞歸查找目錄內的文件,進行編碼轉換

'-------------------------------------------------

 

Function SearchDir(path)  

    Set folder = fs.getfolder(path)

    Set subfolders = folder.subfolders

    Set Files = folder.Files  

    For Each i In Files

       Call ConvertFile(i.path)

    Next  

    For Each j In subfolders      

       Call SearchDir(j.path)

    Next

End Function

 

函數SearchDir是遞歸的,首先調用getfolder創建文件夾對象,然后取出文件夾內的子文件夾集合subfolders和子文件集合files。對于每個子文件,直接調用ConvertFile進行編碼轉換即可,而對于每個子文件夾,則遞歸調用SearchDir重復處理。

復制代碼代碼如下:

'-------------------------------------------------

 

'設置編碼:默認 utf-8  --> gb2312

'-------------------------------------------------

 

SrcCode="utf-8"

DestCode="gb2312"

 

'-------------------------------------------------

'解析參數

'-------------------------------------------------

 

Set fs = CreateObject("scripting.filesystemobject")

Set objArgs = WScript.Arguments

If objArgs.Count>0 Then

    For I = 0 To objArgs.Count - 1

       FileUrl = objArgs(I)

       Call ConvertDir(FileUrl)

    Next

Else

    MsgBox "沒有文件/文件夾被拖入!"

    wscript.quit

End If

MsgBox "轉換成功!"

 

最后通過解析腳本文件的參數,由于每個參數對應一個文件/文件夾的路徑,將之傳遞給ConvertDir即可。這里默認的是將UTF-8編碼轉化為GB2312編碼,讀者可以根據自身需要自行修改。

將上述代碼保存為ConvertCode.vbs,只需要將任意多個文件選中拖動到該腳本文件上即可。或者使用命令行。

復制代碼代碼如下:

> ConvertCode.vbs [filepath]

 

需要注意的是文件編碼是就地轉換的,在轉換之前最好將原文件/文件夾進行備份。

最后附上腳本文件的所有代碼。

復制代碼代碼如下:

'/*===========================================================
' * Intro        把要轉換的多個文件/文件夾拖到該文件上即可
' * FileName     ConvertCode.vbs
' * Author       Florian
' * Version      v1.0
' * LastModify  2014-06-11 00:39:58
' *==========================================================*/

 

'-------------------------------------------------
'設置編碼:默認    utf-8    -->    gb2312
'-------------------------------------------------

SrcCode="utf-8"
DestCode="gb2312"

'-------------------------------------------------
'解析參數
'-------------------------------------------------

Set fs = CreateObject("scripting.filesystemobject")
Set objArgs = WScript.Arguments
If objArgs.Count>0 Then
    For I = 0 To objArgs.Count - 1
        FileUrl = objArgs(I)
        Call ConvertDir(FileUrl)
    Next
Else
    MsgBox "沒有文件/文件夾被拖入!"
    wscript.quit
End If
MsgBox    "轉換成功!"

'-------------------------------------------------
'函數名稱:ConvertDir
'作用:將任意目錄內的文件進行編碼轉換
'-------------------------------------------------

Function ConvertDir(DirUrl)
    If fs.FileExists(DirUrl) Then  
        Call ConvertFile(DirUrl)
    Else
        Call SearchDir(DirUrl)
    End If
End Function


'-------------------------------------------------
'函數名稱:SearchDir
'作用:遞歸查找目錄內的文件,進行編碼轉換
'-------------------------------------------------

Function SearchDir(path)    
    Set folder = fs.getfolder(path)
    Set subfolders = folder.subfolders
    Set Files = folder.Files    
    For Each i In Files
        Call ConvertFile(i.path)
    Next    
    For Each j In subfolders        
        Call SearchDir(j.path)
    Next
End Function

'-------------------------------------------------
'函數名稱:ConvertFile
'作用:將一個文件進行編碼轉換
'-------------------------------------------------

Function ConvertFile(FileUrl)
    Call WriteToFile(FileUrl, ReadFile(FileUrl, SrcCode), DestCode)
End Function

'-------------------------------------------------
'函數名稱:ReadFile
'作用:利用AdoDb.Stream對象來讀取各種格式的文本文件
'-------------------------------------------------

Function ReadFile(FileUrl, CharSet)
    Dim Str
    Set stm = CreateObject("Adodb.Stream")
    stm.Type = 2
    stm.mode = 3
    stm.charset = CharSet
    stm.Open
    stm.loadfromfile FileUrl
    Str = stm.readtext
    stm.Close
    Set stm = Nothing
    ReadFile = Str
End Function

'-------------------------------------------------
'函數名稱:WriteToFile
'作用:利用AdoDb.Stream對象來寫入各種格式的文本文件
'-------------------------------------------------

Function WriteToFile (FileUrl, Str, CharSet)
    Set stm = CreateObject("Adodb.Stream")
    stm.Type = 2
    stm.mode = 3
    stm.charset = CharSet
    stm.Open
    stm.WriteText Str
    stm.SaveToFile FileUrl, 2
    stm.flush
    stm.Close
    Set stm = Nothing
End FunctionView Code


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
清纯唯美亚洲综合| 亚洲国产高清高潮精品美女| 日韩国产在线播放| 国产视频精品一区二区三区| 欧美专区在线播放| 日韩大胆人体377p| 国产亚洲精品一区二555| 国产精品户外野外| 91中文在线视频| 亚洲女人被黑人巨大进入al| 国产成人高清激情视频在线观看| 91在线观看免费高清完整版在线观看| 欧美整片在线观看| 久久久亚洲欧洲日产国码aⅴ| 最近2019中文字幕一页二页| 丝袜亚洲另类欧美重口| 国产欧美久久一区二区| 欧美激情第一页xxx| 日韩精品视频在线免费观看| 5566日本婷婷色中文字幕97| 久久影院资源站| 在线观看久久av| 日韩av网站在线| 日韩av电影在线播放| 奇米影视亚洲狠狠色| 欧美日韩国产麻豆| 亚洲欧美成人一区二区在线电影| 国产精品xxx视频| 久久亚洲国产精品| 亚洲精品自在久久| 亚洲午夜精品久久久久久久久久久久| 国产午夜精品理论片a级探花| 国产成人精品久久| 亚洲精品久久久久中文字幕欢迎你| 欧美精品在线视频观看| 亚洲精品日产aⅴ| 国产精品久久久久免费a∨| 亚洲一区中文字幕在线观看| 亚洲国产福利在线| 高清日韩电视剧大全免费播放在线观看| 亚洲欧美制服丝袜| 狠狠躁夜夜躁人人爽天天天天97| 久久久久久久国产精品| 亚洲人成毛片在线播放| 国外成人在线直播| 欧美性猛交xxx| 国产婷婷色综合av蜜臀av| 韩国欧美亚洲国产| 91在线视频九色| 日韩中文字幕视频| 欧美日韩中国免费专区在线看| 精品久久香蕉国产线看观看gif| 久久久久在线观看| 亚洲在线免费视频| 57pao成人国产永久免费| 久久久精品久久| 久久九九热免费视频| 日韩视频亚洲视频| 色婷婷成人综合| 久久久久久噜噜噜久久久精品| 欧美激情中文字幕在线| 一区二区欧美亚洲| 国产日本欧美一区二区三区| 国产精品在线看| 色狠狠久久aa北条麻妃| 国产97在线亚洲| 欧美资源在线观看| 91av中文字幕| 91视频国产高清| www.美女亚洲精品| 国产亚洲欧美另类中文| 国产精品福利片| 日本成人精品在线| 性色av一区二区三区在线观看| 欧美性猛交xxxx乱大交极品| 在线成人激情视频| 欧美劲爆第一页| 欧美中文字幕在线播放| 日韩在线视频国产| 国产精品入口免费视| 色噜噜狠狠狠综合曰曰曰88av| 日韩成人av在线播放| 日本久久亚洲电影| 日韩精品中文字| 精品亚洲va在线va天堂资源站| 日本精品视频在线播放| 91久久精品久久国产性色也91| 欧美精品videosex性欧美| 亚洲欧洲在线免费| 国产精品免费看久久久香蕉| 日本韩国在线不卡| 国产自摸综合网| 成人黄色免费片| 亚洲精品有码在线| 永久免费精品影视网站| 中文字幕久久久| 精品视频在线导航| 亚洲欧美在线看| 久久久亚洲精品视频| 成人免费黄色网| 69精品小视频| 久久精品电影一区二区| 91久久精品国产91性色| 亚洲精品在线观看www| 搡老女人一区二区三区视频tv| 精品调教chinesegay| 中文字幕国内精品| 曰本色欧美视频在线| 成人福利视频在线观看| 亚洲网站在线看| 色综合视频一区中文字幕| 日韩成人av在线| 亚洲一区二区三区四区视频| 亚洲欧美在线播放| 欧美激情中文字幕乱码免费| 欧美激情xxxx| 国产精品国产三级国产aⅴ浪潮| 久久天天躁狠狠躁夜夜躁2014| 欧美精品免费看| 国产精品久久久久久久久久新婚| 国产精品入口尤物| 久久亚洲春色中文字幕| 色yeye香蕉凹凸一区二区av| 亚洲精品少妇网址| 欧美精品日韩三级| 精品福利在线看| 国产精品一久久香蕉国产线看观看| 7777免费精品视频| 精品露脸国产偷人在视频| 国产精品专区第二| 欧美激情18p| 国内精品视频一区| 欧美精品久久久久久久久| 亚洲欧美日韩在线高清直播| 精品久久久久久久久中文字幕| 国产精品小说在线| 国产成人精品免费视频| 国产精品亚洲视频在线观看| 亚洲精品狠狠操| 91精品在线影院| 亚洲最大的免费| 成人精品视频99在线观看免费| 国产精品v片在线观看不卡| 国产精品无av码在线观看| 国产亚洲日本欧美韩国| 亚洲成人激情图| 亚洲影视中文字幕| 国产精品视频白浆免费视频| 亚洲欧美日韩国产中文专区| 久久久久久久久久国产精品| 欧美日韩亚洲国产一区| 北条麻妃99精品青青久久| 亚洲人成在线播放| 欧美二区乱c黑人| 国产成人精品免高潮在线观看| 日本91av在线播放| 久久手机精品视频| 久久久久亚洲精品成人网小说| 韩国福利视频一区| 九九热精品视频在线播放| 4444欧美成人kkkk| 欧美日韩亚洲视频一区| 国产精品伦子伦免费视频| 北条麻妃一区二区在线观看|