溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

vbs腳本怎么實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼

發(fā)布時(shí)間:2021-07-28 17:53:57 來(lái)源:億速云 閱讀:414 作者:chen 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“vbs腳本怎么實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼”,在日常操作中,相信很多人在vbs腳本怎么實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”vbs腳本怎么實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

復(fù)制代碼 代碼如下:


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

'函數(shù)名稱:ReadFile

'作用:利用AdoDb.Stream對(duì)象來(lái)讀取各種格式的文本文件

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

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函數(shù)讀取文件,其中FileUrl指定文件的路徑,CharSet指定文件的原始編碼格式,使用adodb.stream對(duì)象讀取文件內(nèi)容到Str。

復(fù)制代碼 代碼如下:


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

'函數(shù)名稱:WriteToFile

'作用:利用AdoDb.Stream對(duì)象來(lái)寫(xiě)入各種格式的文本文件

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

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寫(xiě)回原文件FileUrl,并設(shè)定新的編碼CharSet。

復(fù)制代碼 代碼如下:


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

'函數(shù)名稱:ConvertFile

'作用:將一個(gè)文件進(jìn)行編碼轉(zhuǎn)換

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

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

這樣ConvertFile對(duì)上述兩個(gè)函數(shù)封裝,實(shí)現(xiàn)文件FileUrl的編碼轉(zhuǎn)換,其中原始編碼SrcCode與目的編碼DestCode為全局變量。

如果僅對(duì)一個(gè)文件進(jìn)行編碼轉(zhuǎn)換,我們不必這么大費(fèi)周章。我們希望能對(duì)任意的文件或文件夾內(nèi)的所有文件進(jìn)行編碼轉(zhuǎn)換,達(dá)到批量轉(zhuǎn)換的目的。

復(fù)制代碼 代碼如下:

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

'函數(shù)名稱:ConvertDir

'作用:將任意目錄內(nèi)的文件進(jìn)行編碼轉(zhuǎn)換

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

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

函數(shù)ConvertDir對(duì)任意路徑的文件/文件夾進(jìn)行編碼轉(zhuǎn)換,使用scripting.filesystemobject對(duì)象的FileExists函數(shù)判斷路徑對(duì)應(yīng)的是文件還是文件夾,如果是文件則直接調(diào)用ConvertFile進(jìn)行編碼轉(zhuǎn)換,否則調(diào)用SearchDir處理文件夾。

復(fù)制代碼 代碼如下:


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

'函數(shù)名稱:SearchDir

'作用:遞歸查找目錄內(nèi)的文件,進(jìn)行編碼轉(zhuǎn)換

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

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

函數(shù)SearchDir是遞歸的,首先調(diào)用getfolder創(chuàng)建文件夾對(duì)象,然后取出文件夾內(nèi)的子文件夾集合subfolders和子文件集合files。對(duì)于每個(gè)子文件,直接調(diào)用ConvertFile進(jìn)行編碼轉(zhuǎn)換即可,而對(duì)于每個(gè)子文件夾,則遞歸調(diào)用SearchDir重復(fù)處理。

復(fù)制代碼 代碼如下:


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

'設(shè)置編碼:默認(rèn) utf-8  --> gb2312

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

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

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

'解析參數(shù)

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

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 "沒(méi)有文件/文件夾被拖入!"
    wscript.quit
End If

MsgBox "轉(zhuǎn)換成功!"

最后通過(guò)解析腳本文件的參數(shù),由于每個(gè)參數(shù)對(duì)應(yīng)一個(gè)文件/文件夾的路徑,將之傳遞給ConvertDir即可。這里默認(rèn)的是將UTF-8編碼轉(zhuǎn)化為GB2312編碼,讀者可以根據(jù)自身需要自行修改。

將上述代碼保存為ConvertCode.vbs,只需要將任意多個(gè)文件選中拖動(dòng)到該腳本文件上即可?;蛘呤褂妹钚小?br/>

復(fù)制代碼 代碼如下:

> ConvertCode.vbs [filepath]

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

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

復(fù)制代碼 代碼如下:

'/*===========================================================' * Intro        把要轉(zhuǎn)換的多個(gè)文件/文件夾拖到該文件上即可' * FileName     ConvertCode.vbs' * Author       Florian' * Version      v1.0' * LastModify  2014-06-11 00:39:58' *==========================================================*/
'-------------------------------------------------'設(shè)置編碼:默認(rèn)    utf-8    -->    gb2312'-------------------------------------------------
SrcCode="utf-8"DestCode="gb2312"
'-------------------------------------------------'解析參數(shù)'-------------------------------------------------
Set fs = CreateObject("scripting.filesystemobject")Set objArgs = WScript.ArgumentsIf objArgs.Count>0 Then    For I = 0 To objArgs.Count - 1        FileUrl = objArgs(I)        Call ConvertDir(FileUrl)    NextElse    MsgBox "沒(méi)有文件/文件夾被拖入!"    wscript.quitEnd IfMsgBox    "轉(zhuǎn)換成功!"
'-------------------------------------------------'函數(shù)名稱:ConvertDir'作用:將任意目錄內(nèi)的文件進(jìn)行編碼轉(zhuǎn)換'-------------------------------------------------
Function ConvertDir(DirUrl)    If fs.FileExists(DirUrl) Then          Call ConvertFile(DirUrl)    Else        Call SearchDir(DirUrl)    End IfEnd Function
'-------------------------------------------------'函數(shù)名稱:SearchDir'作用:遞歸查找目錄內(nèi)的文件,進(jìn)行編碼轉(zhuǎn)換'-------------------------------------------------
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)    NextEnd Function
'-------------------------------------------------'函數(shù)名稱:ConvertFile'作用:將一個(gè)文件進(jìn)行編碼轉(zhuǎn)換'-------------------------------------------------
Function ConvertFile(FileUrl)    Call WriteToFile(FileUrl, ReadFile(FileUrl, SrcCode), DestCode)End Function
'-------------------------------------------------'函數(shù)名稱:ReadFile'作用:利用AdoDb.Stream對(duì)象來(lái)讀取各種格式的文本文件'-------------------------------------------------
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 = StrEnd Function
'-------------------------------------------------'函數(shù)名稱:WriteToFile'作用:利用AdoDb.Stream對(duì)象來(lái)寫(xiě)入各種格式的文本文件'-------------------------------------------------
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 = NothingEnd FunctionView Code

到此,關(guān)于“vbs腳本怎么實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

vbs
AI