文本批量全角转半角的VBS脚本

来源:互联网 发布:网络无线收发器 编辑:程序博客网 时间:2024/06/06 04:26

文本批量全角转半角的VBS脚本

    刚费尽心思从网上拷贝了一些文本,怎奈文中有许多字符都是全角字符,一个一个地去查找替换很是费尽,于是参考了其他的资料,写了如下的VBS脚本。该脚本的功能是把一个文本文件中的所有全角字符转换为半角字符。
    用法:把下面这些内容复制到一个文本文件中,把这个文本文件改名为后缀为.vbs的文件,然后双击这个文件运行,会弹出一个对话框问要转换的文件,然后问你转换后的文件名,输入完整后点击确定即可。

'**************************************************************************
'Main
Dim sfile
sfile=OpenFile
dfile=SaveFile(sfile)
If len(trim(sfile)) = 0 Then
     MsgBox "请选择一个包含全角字符的源文件"
Else
     Convert sfile,dfile  
End if
'**************************************************************************

'*******************************************************************'
'保存文件
'*******************************************************************'
Function SaveFile(filename)
    Set objDialog = CreateObject("SAFRCFileDlg.FileSave")
    objDialog.FileType = "*.*"
    objDialog.FileName = filename & ".new"
    objDialog.OpenFileSaveDlg
    SaveFile = objDialog.FileName
End Function
'*******************************************************************'
'打开文件
'*******************************************************************'
Function OpenFile
Set objDialog = CreateObject("UserAccounts.CommonDialog")
    objDialog.Filter = "文本文件|*.txt;*.bat|所有文件|*.*"
    'objDialog.MaxFileSize = 10000
    'objDialog.FilterIndex = 1
    'objDialog.InitialDir = ""
    objDialog.ShowOpen
    'strLoadFile = objDialog.FileName
    OpenFile=trim(objDialog.FileName)
End Function
'**********************************************************************
'转换过程
'**********************************************************************
Sub Convert(strFile,strNewFile)
        Dim objFSo,objSrcFile,objDstFile
        Dim strTmp,intAsc
        Dim boolFlag
    
    '若原文件名与新文件名相同,则标志置位
    If LCase(strFile) = LCase(strNewFile) Then
        boolFlag = True
        strNewFile = strNewFile & ".tmp"
    Else
        boolFlag = False
    End If
    
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objSrcFile = objFSO.OpenTextFile(strFile,1)
        Set objDstFile = objFSO.OpenTextFile(strNewFile,2,True)      
            Do
                strTmp = objSrcFile.Read(1)
                intAsc = Asc(strTmp)
                If intAsc < -23554 And intAsc > -23648 Then
                    objDstFile.Write Chr(23680 + intAsc)
                ElseIf intAsc = -24159 Then
                    objDstFile.Write " "
                ElseIf intAsc = -24089 Then
                    objDstFile.Write "$"
                Else
                    objDstFile.Write strTmp
                End If
            Loop Until objSrcFile.AtEndOfStream
        
            objDstFile.Close
            objSrcFile.Close
            
            If boolFlag Then
                objFSo.DeleteFile strFile
                objFSO.MoveFile strNewFile,strFile
            End If
            
        Set objSrcFile = Nothing
        Set objDstFile = Nothing
        Set objFSO = Nothing
End Sub