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

[文本处理] 【已解决】批处理如何能够随心所欲的换行?

[复制链接]
发表于 2018-7-15 16:32:14 | 显示全部楼层 |阅读模式
本帖最后由 屡败屡战 于 2018-7-20 19:19 编辑

我有一个论坛大伽的代码,其功用是将当前文件夹下的N个txt文本文件中指定字符串“。”后面添加换行。
但是有个问题,就是文章经整理后,文章的段落划分的太多,太零散。不太适合浏览文章。
我想请大神们修改代码,最好可以每隔2个句号(或3个句号)就换行。
如果能间隔几个句号就换行,句号的个数可以由自己决定,最好请大绅们在代码中注明如何修改“句号”的个数。
便于曰后自己调整“句号”的个数。
我改了好久,效果不好,望论坛大绅们帮帮忙!!
  1. @echo off&setlocal enabledelayedexpansion
  2. md "%~dp0new" 2>nul
  3. for /f "delims=" %%a in ('dir /b *.txt') do (
  4.     (for /f "delims=" %%b in ('type "%%a"') do (
  5.         set "str=%%b"
  6.         echo !str:^。^=^。^

  7. !
  8.     ))>tmp
  9. more tmp>"new\%%a"&del tmp
  10. )
  11. echo 文件已保存在new文件夹&pause
复制代码




另外,还有个问题,上面这个代码是在“。”号之后换行的。
我想改成在“。”号之前就换行的,不知行不行?



老师好:我的电脑无法安装PowerShell,故无法执行PowerShell命令代码。我想求bat批处理代码。谢谢了!!

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2018-7-15 18:15:46 | 显示全部楼层

  1. @echo off&setlocal enabledelayedexpansion
  2. md "%~dp0new" 2>nul
  3. set 句号=2
  4. for /f "delims=" %%a in ('dir /b *.txt') do (
  5.     set n=0
  6.     (for /f "delims=" %%b in ('type "%%a"') do (
  7.         set "str=%%b"
  8.         if not "!str:。=!"=="%%b" set/a n+=1
  9.         if !n!==%句号% (
  10.                 echo,%%b&echo,&set n=0
  11.         ) else echo,%%b
  12.     ))>tmp
  13. more tmp>"new\%%a"
  14. )
  15. echo 文件已保存在new文件夹&del tmp&pause
复制代码

评分

参与人数 2PB +12 技术 +2 收起 理由
屡败屡战 + 1 谢谢老师
CrLf + 12 + 1 大佬

查看全部评分

 楼主| 发表于 2018-7-16 07:23:13 | 显示全部楼层
本帖最后由 屡败屡战 于 2018-7-16 10:03 编辑

老师,点击代码操作后,文档无任何反应,不能进行分段。不知咋回亊??
另外,请在代码旁白处注明:如何修改“。”号的个数


另外,还有个补充问题,上面这个代码是在“。”号之后换行的。
我想改成在“。”号之前就换行的,不知行不行?
发表于 2018-7-16 10:09:48 | 显示全部楼层
回复 1# 屡败屡战


第6行到第8行改成:
  1. echo !str:^。^=^

  2. ^。!
复制代码
可以实现在“。”号之前就换行

评分

参与人数 1技术 +1 收起 理由
屡败屡战 + 1 谢谢老师

查看全部评分

发表于 2018-7-17 21:52:52 | 显示全部楼层
每 3 个句号换一次行
  1. PowerShell -c "dir *.txt | ForEach{$arr=(type $_) -replace '(?:[^。]*。){3}(?!$)', ('$&'+"`r`n"); sc ($_.Name + '.Log') -value $arr}"
复制代码
在句号之前换行:
  1. PowerShell -c "dir *.txt | ForEach{$arr=(type $_) -replace '((?:[^。]*。){2}[^。]*)。(?!$)', ('$1'+"`r`n。"); sc ($_.Name + '.Log') -v $arr}"
复制代码

评分

参与人数 2技术 +2 收起 理由
屡败屡战 + 1 无限崇拜,我的大师
yhcfsr + 1 膜拜大神。

查看全部评分

 楼主| 发表于 2018-7-18 09:58:55 | 显示全部楼层
老师好:我的电脑无法安装PowerShell,故无法执行PowerShell命令代码。我想求bat批处理代码。谢谢了!!
发表于 2018-7-18 13:07:14 | 显示全部楼层
本帖最后由 yhcfsr 于 2018-7-18 13:09 编辑

把问题发到群里来,你的问题还有些疑问之处.
如果按照WORD的段落定义,遇到换行才会分段.在BAT中,遇到换行符前,所有的字符都在一行.换句话说,按照WORD的说法,BAT中一行就是一段.
所以按2楼的逐行判断法,如果一行中有N个句号,则无法将这N个句号进行分割.极端的情况,如果全文只有一行,你将会无功而返.
发表于 2018-7-18 13:23:28 | 显示全部楼层
回复 6# 屡败屡战


    你的电脑是什么操作系统?
 楼主| 发表于 2018-7-18 17:44:26 | 显示全部楼层
本帖最后由 屡败屡战 于 2018-7-18 17:48 编辑

楼上老师说得太好了,一针见血。我的文档就是这种情况,整篇文章就只有一行(标题行不算)
整篇文章看得我眼花,故求助。

另外我的电脑系统是win7 64位,不知咋搞的,安装PowerShell脚本,总是提示失败
发表于 2018-7-18 19:11:26 | 显示全部楼层
回复 9# 屡败屡战


精简系统很可能无法安装.正常系统WIN7,需要先安装.NET 4.5,然后才能安装升级补丁.
不过还是有些电脑无法运行MSU更新包,必须解压,用DISM命令来安装更新.  
我建议你加入论坛QQ群,方便交流,或者看我签名,加我QQ
 楼主| 发表于 2018-7-18 19:24:01 | 显示全部楼层
那么能否将txt文本格式转换成word文件,从word文件替换方面想想办法
发表于 2018-7-18 20:47:48 | 显示全部楼层
本帖最后由 yhcfsr 于 2018-7-19 18:07 编辑

回复 11# 屡败屡战

如果只几个文本,参考5楼的的正则部分,用NOTEPAD++修改.
如果文件多,用以下脚本.保存为BAT
  1. @set @n=0/*&echo off&set "script=%~f0"
  2. dir /a-d/s/b *.txt|cscript -nologo -e:jscript "%script%"
  3. pause&exit /b */

  4. //脚本与要处理的文件放一起
  5. //脚本会处理目录中所有TXT文件

  6. var n=4;//设置每n个句号换一次行

  7. var fso=new ActiveXObject('scripting.FileSystemObject')
  8. while(!WSH.StdIn.AtEndOfStream){
  9.         var file=WSH.StdIn.ReadLine();
  10.         fo=fso.OpenTextFile(file,1);
  11.         content=fo.ReadAll();
  12.         var re =new RegExp("(?:[^。]*。){"+n+"}(?!$)","gim")
  13.         content=content.replace(re,'$&\r\n')
  14.         fo.close();
  15.         fo=fso.OpenTextFile(file,2);
  16.         fo.Write(content);
  17.         fo.close();       
  18. }
复制代码

评分

参与人数 1技术 +1 收起 理由
屡败屡战 + 1 代码完美,谢谢老师

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 15:28 , Processed in 0.023567 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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