Board logo

标题: [文本处理] 批处理怎样把TXT格式的文本转换成SBK的? [打印本页]

作者: yi12133    时间: 2009-4-12 15:09     标题: 批处理怎样把TXT格式的文本转换成SBK的?

问题很简单,比如有一个TXT格式的文本。
怎么用批处理把它转换成SBK格式,要求编码是Unicode的。
作者: defanive    时间: 2009-4-12 16:21

找sed帮忙吧,貌似自带的命令没有转编码的功能。。。
作者: fastslz    时间: 2009-4-12 16:23

  1. ' *==============================================================================*
  2. ' * CMD 命令行编码转换工具包括GB2312,UTF-8,Unicode,BIG5...支持拖拽、文件另保存为 *
  3. ' * CodeChange.vbs     BY: yongfa365 http://www.yongfa365.com         2007-10-04 *
  4. ' * GB2Ue.vbs          BY: fastslz   http://bbs.cn-dos.net            2007-12-03 *
  5. ' *==============================================================================*
  6. Show = "本程序仅支持GB2312到Unicode的转换,请拖拽单个要转换的文件到此文件上!    "
  7. Usage1 = "语法1:GB2Ue.vbs [驱动器][目录][文件名] (直接替换原文件模式)"
  8. Usage2 = "语法2:GB2Ue.vbs [驱动器][目录][文件名]  [目标驱动器][目录][新名称]  /Y"
  9. Usage3 = "        如果目标新文件已存在,使用/Y参数后将直接替换而不提示是否改写!  "
  10. Usage4 = "命令行编码转换工具 BY: fastslz"
  11. aCode = "GB2312"
  12. bCode = "Unicode"
  13. Set objArgs=WScript.Arguments
  14. Set fso=CreateObject("Scripting.FileSystemObject")
  15. if objArgs.Count=0 Then
  16.    MsgBox Show &vbCrLf&vbCrLf& Usage1 &vbCrLf& Usage2 &vbCrLf& Usage3, vbInformation, Usage4
  17.    Wscript.Quit
  18. end if
  19. if not objArgs.Count < 3 Then
  20.        Options="/y"
  21.        ignoring = StrComp(objArgs(2), Options, vbTextCompare)
  22.        if ignoring = 0 Then
  23.           Sourcefile=objArgs(0)
  24.           Getfile=objArgs(1)
  25.           else
  26.           MsgBox "文件数量或参数太多,拖拽批量处理请用 ANSI2Unicode.vbs     ", vbInformation, "程序意外终止"
  27.           Wscript.Quit
  28.        end if
  29.        else
  30.        if not objArgs.Count < 2 Then
  31.           Sourcefile=objArgs(0)
  32.           Getfile=objArgs(1)
  33.           if fso.FileExists(objArgs(1)) then
  34.              Choice = MsgBox ("待处理文件“"+Sourcefile+"” ==> 目标文件“"+Getfile+"”    "&vbCrLf&"目标文件已存在,是否改写现有文件?“"+objArgs(1)+"”    ",vbQuestion+vbYesNo,"是否改写")
  35.              if Choice = vbYes Then
  36.                 Getfile=objArgs(1)
  37.                 else
  38.                 Wscript.Quit
  39.              end if
  40.           end if
  41.           else
  42.           Sourcefile=objArgs(0)
  43.           Getfile=objArgs(0)
  44.        end if
  45. end if
  46. Call WriteToFile(Getfile, ReadFile(Sourcefile, aCode), bCode)
  47. Wscript.Quit
  48. Function ReadFile (Sourcefile, CharSet)
  49.     Dim Str
  50.     Set stm = CreateObject("Adodb.Stream")
  51.     stm.Type = 2
  52.     stm.mode = 3
  53.     stm.charset = CharSet
  54.     stm.Open
  55.     stm.loadfromfile Sourcefile
  56.     Str = stm.readtext
  57.     stm.Close
  58.     Set stm = Nothing
  59.     ReadFile = Str
  60. End Function
  61. Function WriteToFile (Getfile, Str, CharSet)
  62.     Set stm = CreateObject("Adodb.Stream")
  63.     stm.Type = 2
  64.     stm.mode = 3
  65.     stm.charset = CharSet
  66.     stm.Open
  67.     stm.WriteText Str
  68.     stm.SaveToFile Getfile,2
  69.     stm.flush
  70.     stm.Close
  71.     Set stm = Nothing
  72. End Function
复制代码

作者: namejm    时间: 2009-4-12 20:11

原帖由 defanive 于 2009-4-12 16:21 发表
找sed帮忙吧,貌似自带的命令没有转编码的功能。。。

  有的有的,CMD窗口下祭出 /? 大法,查询:cmd /?,找到一个很有用的参数:
/U      使向内部管道或文件命令的输出成为 Unicode

  如果要用for读取Unicode编码格式文本,可以配合more或type来处理。

  楼主的图片在QQ空间里,论坛里显示不了,不知道楼主指的SBK是啥玩意,只好给出这些提示,请自行测试。
作者: fastslz    时间: 2009-4-12 20:57

SBK是电子书,也就是Unicode文本文件。
GB2312转Unicode用cmd /u /c是比较方便,只是用在批处理上语法对新手来说不太容易掌握(主要是双引号“”)
  1. @echo off
  2. md Unicode 2>nul
  3. for /r %%i in (*.vbs) do cmd /u /c "type "%%i">"Unicode\%%~ni.x""
复制代码

作者: zqz0012005    时间: 2009-4-12 21:18

CMD输出的Unicode有兼容性问题。用一般工具打开会显示乱码,必须用可以选择编码的工具如word才能看。
作者: Batcher    时间: 2009-4-12 23:12     标题: 回复 6楼 的帖子

C:\Test>type a.txt
45872635481020326585
[email]Batcher@bbs.bathome.net[/email]

C:\Test>type test.bat
@echo off
cmd /u /c "type a.txt>a_u.txt"
C:\Test>test.bat

测试环境:WinXP SP2 Pro EN
测试结果:用记事本打开转换以后Unicode编码文件a_u.txt未出现乱码

貂蝉兄能否给个出现乱码的例子学习一下?
作者: Batcher    时间: 2009-4-12 23:20     标题: 回复 2楼 的帖子

还没有见过有人用sed进行ANSI2UNICODE操作呢,能否给个例子学习一下?
作者: zqz0012005    时间: 2009-4-13 11:35     标题: 回复 7楼 的帖子

你试试cmd /u /c "type C:\boot.ini>u.txt"

我记得我以前探讨过这个问题,找到了:
http://bbs.verybat.org/viewthread.php?tid=11219&fromuid=37




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2