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

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

本帖最后由 屡败屡战 于 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批处理代码。谢谢了!!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  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
复制代码
2

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

本帖最后由 屡败屡战 于 2018-7-16 10:03 编辑

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


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

TOP

回复 1# 屡败屡战


第6行到第8行改成:
  1. echo !str:^。^=^
  2. ^。!
复制代码
可以实现在“。”号之前就换行
1

评分人数

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

TOP

每 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

评分人数

TOP

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

TOP

本帖最后由 yhcfsr 于 2018-7-18 13:09 编辑

把问题发到群里来,你的问题还有些疑问之处.
如果按照WORD的段落定义,遇到换行才会分段.在BAT中,遇到换行符前,所有的字符都在一行.换句话说,按照WORD的说法,BAT中一行就是一段.
所以按2楼的逐行判断法,如果一行中有N个句号,则无法将这N个句号进行分割.极端的情况,如果全文只有一行,你将会无功而返.
QQ 33892006

TOP

回复 6# 屡败屡战


    你的电脑是什么操作系统?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 屡败屡战 于 2018-7-18 17:48 编辑

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

另外我的电脑系统是win7 64位,不知咋搞的,安装PowerShell脚本,总是提示失败

TOP

回复 9# 屡败屡战


精简系统很可能无法安装.正常系统WIN7,需要先安装.NET 4.5,然后才能安装升级补丁.
不过还是有些电脑无法运行MSU更新包,必须解压,用DISM命令来安装更新.  
我建议你加入论坛QQ群,方便交流,或者看我签名,加我QQ
QQ 33892006

TOP

那么能否将txt文本格式转换成word文件,从word文件替换方面想想办法

TOP

本帖最后由 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

评分人数

QQ 33892006

TOP

返回列表