文本批量全角转半角的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
用法:把下面这些内容复制到一个文本文件中,把这个文本文件改名为后缀为.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