[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理怎样批量将无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编码的批处理应该怎样写呢?

直接转换成 gbk 编码:
  1. concmd.exe /o:gbk *.txt
复制代码

TOP

“添加UFT-8文件头并转换成ANSI编码”,无需添加BOM照样转换
  1. set fso = CreateObject("Scripting.FileSystemObject")
  2. 'Files属性获取文件集合时,与CMD下的for遍历文件有相同的Bug:
  3. '如果文件名有变动,可能会重复或多次遍历
  4. '看来是某个API的Bug
  5. '所以先获取文件列表再使用保险一点
  6. FileList = ""
  7. for each oFile in fso.GetFolder(".").Files
  8.     if LCase(fso.GetExtensionName(oFile.Path)) = LCase("txt") then
  9.         FileList = FileList & oFile.Path & vbCrLf
  10.     end if
  11. next
  12. Files = Split(FileList, vbCrLf)
  13. for i=0 to UBound(Files)-1 '最后一个元素是空的
  14.     'U8ToU8Bom Files(i) '如果要生成一个有BOM的文件,启用此行
  15.     U8ToAnsi Files(i)
  16. next
  17. function U8ToU8Bom(strFile)
  18.     dim ADOStrm
  19.     Set ADOStrm = CreateObject("ADODB.Stream")
  20.     ADOStrm.Type = 2
  21.     ADOStrm.Mode = 3
  22.     ADOStrm.CharSet = "utf-8"
  23.     ADOStrm.Open
  24.     ADOStrm.LoadFromFile strFile
  25.     ADOStrm.SaveToFile strFile & ".u8.txt", 2
  26.     ADOStrm.Close
  27.     Set ADOStrm = Nothing
  28. end function
  29. function U8ToAnsi(strFile)
  30.     dim ADOStrm
  31.     dim s
  32.     Set ADOStrm = CreateObject("ADODB.Stream")
  33.     ADOStrm.Type = 2
  34.     ADOStrm.Mode = 3
  35.     ADOStrm.CharSet = "utf-8"
  36.     ADOStrm.Open
  37.     ADOStrm.LoadFromFile strFile
  38.     s = ADOStrm.ReadText
  39.     ADOStrm.Position = 0
  40.     ADOStrm.CharSet = "gbk"
  41.     ADOStrm.WriteText s
  42.     ADOStrm.SetEOS
  43.     ADOStrm.SaveToFile strFile & ".ansi.txt", 2
  44.     ADOStrm.Close
  45.     Set ADOStrm = Nothing
  46. end function
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回2楼 : concmd 何处下载?
回3楼 : 如何判断文件是 UTF8或 ANSI 编码?

TOP

本帖最后由 pcl_test 于 2018-4-12 15:20 编辑
  1. @echo off
  2. powershell ^
  3.     dir . *.txt^|%%{^
  4.         $txt = [IO.File]::ReadAllText($_.FullName, [Text.Encoding]::UTF8);^
  5.         [IO.File]::WriteAllText($_.FullName, $txt ,[Text.Encoding]::Default);^
  6.     }
  7. pause
复制代码

TOP

感谢 zqz0012005版主提供的VBS脚本,的确可以直接转换成ANSI编码,不过这个脚本是在当前目录直接生成的TXT文件,我想直接将原文件替换成ANSI编码,不知该怎么改一下呢?谢谢了

TOP

批处理添加UTF-8文件头并转换为ANSI编码
http://bbs.bathome.net/viewthrea ... amp;page=2#pid51589
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

Batcher老大,你说的这个帖子不能实现我想要的功能

TOP

回复 8楼 的帖子

具体说说哪里“不能”?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 6楼 的帖子

& ".ansi.txt"去掉即可。

提示:不管代码可靠性有多高,如果涉及到直接修改原文件,运行代码前先进行备份是中华民族优良传统^_^
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

我感觉好象打开UTF-8的文本,然后另存为ANSI文本就可以了呢?
努力学习,努力挣分

TOP

原帖由 sgaizxt001 于 2010-6-22 22:14 发表
我感觉好象打开UTF-8的文本,然后另存为ANSI文本就可以了呢?


呵呵,这样当然可以,不过如果有500个TXT文件你还打算用这种方法吗?

TOP

原帖由 zqz0012005 于 2010-6-22 21:00 发表
将& ".ansi.txt"去掉即可。

提示:不管代码可靠性有多高,如果涉及到直接修改原文件,运行代码前先进行备份是中华民族优良传统^_^


感谢版主热心回复

TOP

返回列表