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

[文本处理] 新手求助批处理怎样修改小说章节?

一本1000多章小说,他每一章的标题是1 xxx,2 xxx,这样掌阅之类的软件分章是乱的,不能很好的识别,怎么能改成第一章 xxx,第二章 xxx,或者第1章 xxx,第2章 xxx?

最有效的TXT分章工具txtSplit v6,100%按照第x章分割,
连正文中出现第x章也会被分割,所以略有缺陷。
搜索:txt切割器 小说章节分割 V6.0
必须改成ANSI编码,否则其他会乱码。

TXT杀手最终标题版,能100%按照第x章xxx分割,
缺陷:正文行太长或标题行太长、特殊字符就会错误,可以备用。

easypub,正则表达式提取章节名称分割,txt直接生成小说,
如果电脑听书还是缺少相关100%有效工具,因为标题后面如果是正文需要先添加个换行,
特殊字符及一些标点需要先替换成大写的。

TOP

回复 5# nobody037
你应该对批处理有点基础才行。不能再问为啥只显示最后几章了,echo就是一直显示,直到文件结束,你加个文件输出 >out.txt就能解决。

TOP

回复 2# happy886rr


    好了,我改了下文件编码就没问题了,谢谢大神啊

TOP

回复 2# happy886rr


    用第一段代码的话只有最后200多章的内容,而用第二段代码的话生成的文件除了“第x章”之外就全是乱码了。。。。

TOP

C#DAFA 好

TOP

本帖最后由 happy886rr 于 2017-7-25 12:43 编辑

用法:存为bat跟test.txt放一起。
JS混编
  1. 1>1/* :
  2. @echo off&cls&cscript -nologo -e:jscript "%~f0" test.txt&pause&exit
  3.     */
  4. var fso=new ActiveXObject('Scripting.FileSystemObject'), fp=fso.OpenTextFile(WScript.Arguments(0), 1);
  5. while(! fp.AtEndOfStream)
  6. {
  7. WScript.echo((fp.ReadLine()).replace(/(\d+)(\s.*)/, '第$1章$2'));
  8. }
复制代码
.
.
Csharp
  1. /*************************************************************************
  2. @ECHO OFF&CLS&TITLE MINI CSHARP COMPILER BY HAPPY
  3. for /f "delims=" %%a in ('dir /a-d /b /s "%systemroot%\Microsoft.NET\Framework\csc.exe"') do (
  4. "%%~a" /out:a.exe "%~f0" && a.exe
  5. pause&exit/b
  6. )
  7. )
  8. set/p=You needs Microsoft.NET!&exit/b
  9. **************************************************************************/
  10. using System;
  11. using System.IO;
  12. using System.Text;
  13. using System.Text.RegularExpressions;
  14. namespace FileIOApplication
  15. {
  16. class Program
  17. {
  18. static void Main(string[] args)
  19. {
  20. FileStream inFp  = new FileStream("test.txt", FileMode.Open, FileAccess.Read);
  21. FileStream outFp = new FileStream("test2.txt", FileMode.Create, FileAccess.Write);
  22. byte[] inFpBinary = new byte[inFp.Length];
  23. inFp.Read(inFpBinary, 0, (int)inFp.Length);
  24. inFp.Close();
  25. string inTextString  = System.Text.Encoding.UTF8.GetString(inFpBinary);
  26. string outTextString = Regex.Replace(inTextString, @"(\d+)(\s.*)", @"第$1章$2");
  27. byte[] outFpBinary = System.Text.Encoding.Default.GetBytes(outTextString);
  28. outFp.Write(outFpBinary, 0, (int)outFpBinary.Length);
  29. outFp.Close();
  30. }
  31. }
  32. }
复制代码
2

评分人数

TOP

返回列表