标题: [文件操作] 批处理怎样批量将无BOM头UTF-8编码的txt并转成ANSI编码? [打印本页]
作者: zxzl 时间: 2010-6-22 00:17 标题: 批处理怎样批量将无BOM头UTF-8编码的txt并转成ANSI编码?
本帖最后由 pcl_test 于 2018-4-12 14:55 编辑
有一批TXT文件是用软件生成的,都是UTF-8编码,本来想用那个VBS转换脚本把这些UTF-8编码转换成ANSI编码,可是这个VBS脚本却识别不出这是UTF8编码文件,而电脑中手动建立的UTF-8编码TXT文件这个脚本可以正常识别转换,我想可能是软件在生成TXT文件时没有添加UTF-8头,现在假如VBS脚本名为UTF82ANSI.VBS,和所有TXT文件都在同一目录下,那么将所有TXT文件添加UFT-8文件头并转换成ANSI编码的批处理应该怎样写呢?
作者: 73yexs4f8qzk 时间: 2010-6-22 00:25
直接转换成 gbk 编码:复制代码
作者: zqz0012005 时间: 2010-6-22 01:31
“添加UFT-8文件头并转换成ANSI编码”,无需添加BOM照样转换- set fso = CreateObject("Scripting.FileSystemObject")
-
- 'Files属性获取文件集合时,与CMD下的for遍历文件有相同的Bug:
- '如果文件名有变动,可能会重复或多次遍历
- '看来是某个API的Bug
- '所以先获取文件列表再使用保险一点
-
- FileList = ""
- for each oFile in fso.GetFolder(".").Files
- if LCase(fso.GetExtensionName(oFile.Path)) = LCase("txt") then
- FileList = FileList & oFile.Path & vbCrLf
- end if
- next
-
- Files = Split(FileList, vbCrLf)
- for i=0 to UBound(Files)-1 '最后一个元素是空的
- 'U8ToU8Bom Files(i) '如果要生成一个有BOM的文件,启用此行
- U8ToAnsi Files(i)
- next
-
- function U8ToU8Bom(strFile)
- dim ADOStrm
- Set ADOStrm = CreateObject("ADODB.Stream")
- ADOStrm.Type = 2
- ADOStrm.Mode = 3
- ADOStrm.CharSet = "utf-8"
- ADOStrm.Open
- ADOStrm.LoadFromFile strFile
- ADOStrm.SaveToFile strFile & ".u8.txt", 2
- ADOStrm.Close
- Set ADOStrm = Nothing
- end function
-
- function U8ToAnsi(strFile)
- dim ADOStrm
- dim s
- Set ADOStrm = CreateObject("ADODB.Stream")
- ADOStrm.Type = 2
- ADOStrm.Mode = 3
- ADOStrm.CharSet = "utf-8"
- ADOStrm.Open
- ADOStrm.LoadFromFile strFile
- s = ADOStrm.ReadText
- ADOStrm.Position = 0
- ADOStrm.CharSet = "gbk"
- ADOStrm.WriteText s
- ADOStrm.SetEOS
- ADOStrm.SaveToFile strFile & ".ansi.txt", 2
- ADOStrm.Close
- Set ADOStrm = Nothing
- end function
复制代码
作者: pdanniel66 时间: 2010-6-22 04:53
回2楼 : concmd 何处下载?
回3楼 : 如何判断文件是 UTF8或 ANSI 编码?
作者: 73yexs4f8qzk 时间: 2010-6-22 08:11
本帖最后由 pcl_test 于 2018-4-12 15:20 编辑
- @echo off
- powershell ^
- dir . *.txt^|%%{^
- $txt = [IO.File]::ReadAllText($_.FullName, [Text.Encoding]::UTF8);^
- [IO.File]::WriteAllText($_.FullName, $txt ,[Text.Encoding]::Default);^
- }
- pause
复制代码
作者: zxzl 时间: 2010-6-22 08:22
感谢 zqz0012005版主提供的VBS脚本,的确可以直接转换成ANSI编码,不过这个脚本是在当前目录直接生成的TXT文件,我想直接将原文件替换成ANSI编码,不知该怎么改一下呢?谢谢了
作者: Batcher 时间: 2010-6-22 09:49
批处理添加UTF-8文件头并转换为ANSI编码
http://bbs.bathome.net/viewthrea ... amp;page=2#pid51589
作者: zxzl 时间: 2010-6-22 10:19
Batcher老大,你说的这个帖子不能实现我想要的功能
作者: Batcher 时间: 2010-6-22 11:32 标题: 回复 8楼 的帖子
具体说说哪里“不能”?
作者: zqz0012005 时间: 2010-6-22 21:00 标题: 回复 6楼 的帖子
将& ".ansi.txt"去掉即可。
提示:不管代码可靠性有多高,如果涉及到直接修改原文件,运行代码前先进行备份是中华民族优良传统^_^
作者: sgaizxt001 时间: 2010-6-22 22:14
我感觉好象打开UTF-8的文本,然后另存为ANSI文本就可以了呢?
作者: zxzl 时间: 2010-6-22 22:22
原帖由 sgaizxt001 于 2010-6-22 22:14 发表
我感觉好象打开UTF-8的文本,然后另存为ANSI文本就可以了呢?
呵呵,这样当然可以,不过如果有500个TXT文件你还打算用这种方法吗?
作者: zxzl 时间: 2010-6-22 22:23
原帖由 zqz0012005 于 2010-6-22 21:00 发表
将& ".ansi.txt"去掉即可。
提示:不管代码可靠性有多高,如果涉及到直接修改原文件,运行代码前先进行备份是中华民族优良传统^_^
感谢版主热心回复
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |