找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 52886|回复: 12

[文件操作] 批处理怎样批量将无BOM头UTF-8编码的txt并转成ANSI编码?

[复制链接]
发表于 2010-6-22 00:17:03 | 显示全部楼层 |阅读模式
本帖最后由 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编码的批处理应该怎样写呢?
发表于 2010-6-22 00:25:37 | 显示全部楼层
直接转换成 gbk 编码:
  1. concmd.exe /o:gbk *.txt
复制代码
发表于 2010-6-22 01:31:54 | 显示全部楼层
“添加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
复制代码
发表于 2010-6-22 04:53:23 | 显示全部楼层
回2楼 : concmd 何处下载?
回3楼 : 如何判断文件是 UTF8或 ANSI 编码?
发表于 2010-6-22 08:11:31 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2010-6-22 08:22:03 | 显示全部楼层
感谢 zqz0012005版主提供的VBS脚本,的确可以直接转换成ANSI编码,不过这个脚本是在当前目录直接生成的TXT文件,我想直接将原文件替换成ANSI编码,不知该怎么改一下呢?谢谢了
发表于 2010-6-22 09:49:12 | 显示全部楼层
批处理添加UTF-8文件头并转换为ANSI编码
http://bbs.bathome.net/viewthrea ... amp;page=2#pid51589
 楼主| 发表于 2010-6-22 10:19:44 | 显示全部楼层
Batcher老大,你说的这个帖子不能实现我想要的功能
发表于 2010-6-22 11:32:54 | 显示全部楼层

回复 8楼 的帖子

具体说说哪里“不能”?
发表于 2010-6-22 21:00:46 | 显示全部楼层

回复 6楼 的帖子

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

提示:不管代码可靠性有多高,如果涉及到直接修改原文件,运行代码前先进行备份是中华民族优良传统^_^
发表于 2010-6-22 22:14:05 | 显示全部楼层
我感觉好象打开UTF-8的文本,然后另存为ANSI文本就可以了呢?
 楼主| 发表于 2010-6-22 22:22:53 | 显示全部楼层
原帖由 sgaizxt001 于 2010-6-22 22:14 发表
我感觉好象打开UTF-8的文本,然后另存为ANSI文本就可以了呢?


呵呵,这样当然可以,不过如果有500个TXT文件你还打算用这种方法吗?
 楼主| 发表于 2010-6-22 22:23:27 | 显示全部楼层
原帖由 zqz0012005 于 2010-6-22 21:00 发表
将& ".ansi.txt"去掉即可。

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


感谢版主热心回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:01 , Processed in 0.021464 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表