标题: [文本处理] 【已解决】批处理如何能够随心所欲的换行? [打印本页]
作者: 屡败屡战 时间: 2018-7-15 16:32 标题: 【已解决】批处理如何能够随心所欲的换行?
本帖最后由 屡败屡战 于 2018-7-20 19:19 编辑
我有一个论坛大伽的代码,其功用是将当前文件夹下的N个txt文本文件中指定字符串“。”后面添加换行。
但是有个问题,就是文章经整理后,文章的段落划分的太多,太零散。不太适合浏览文章。
我想请大神们修改代码,最好可以每隔2个句号(或3个句号)就换行。
如果能间隔几个句号就换行,句号的个数可以由自己决定,最好请大绅们在代码中注明如何修改“句号”的个数。
便于曰后自己调整“句号”的个数。
我改了好久,效果不好,望论坛大绅们帮帮忙!!- @echo off&setlocal enabledelayedexpansion
- md "%~dp0new" 2>nul
- for /f "delims=" %%a in ('dir /b *.txt') do (
- (for /f "delims=" %%b in ('type "%%a"') do (
- set "str=%%b"
- echo !str:^。^=^。^
-
- !
- ))>tmp
- more tmp>"new\%%a"&del tmp
- )
- echo 文件已保存在new文件夹&pause
复制代码
另外,还有个问题,上面这个代码是在“。”号之后换行的。
我想改成在“。”号之前就换行的,不知行不行?
老师好:我的电脑无法安装PowerShell,故无法执行PowerShell命令代码。我想求bat批处理代码。谢谢了!!
作者: xxpinqz 时间: 2018-7-15 18:15
- @echo off&setlocal enabledelayedexpansion
- md "%~dp0new" 2>nul
- set 句号=2
- for /f "delims=" %%a in ('dir /b *.txt') do (
- set n=0
- (for /f "delims=" %%b in ('type "%%a"') do (
- set "str=%%b"
- if not "!str:。=!"=="%%b" set/a n+=1
- if !n!==%句号% (
- echo,%%b&echo,&set n=0
- ) else echo,%%b
- ))>tmp
- more tmp>"new\%%a"
- )
- echo 文件已保存在new文件夹&del tmp&pause
复制代码
作者: 屡败屡战 时间: 2018-7-16 07:23
本帖最后由 屡败屡战 于 2018-7-16 10:03 编辑
老师,点击代码操作后,文档无任何反应,不能进行分段。不知咋回亊??
另外,请在代码旁白处注明:如何修改“。”号的个数
另外,还有个补充问题,上面这个代码是在“。”号之后换行的。
我想改成在“。”号之前就换行的,不知行不行?
作者: Batcher 时间: 2018-7-16 10:09
回复 1# 屡败屡战
第6行到第8行改成:复制代码
可以实现在“。”号之前就换行
作者: WHY 时间: 2018-7-17 21:52
每 3 个句号换一次行- PowerShell -c "dir *.txt | ForEach{$arr=(type $_) -replace '(?:[^。]*。){3}(?!$)', ('$&'+\"`r`n\"); sc ($_.Name + '.Log') -value $arr}"
复制代码
在句号之前换行:- PowerShell -c "dir *.txt | ForEach{$arr=(type $_) -replace '((?:[^。]*。){2}[^。]*)。(?!$)', ('$1'+\"`r`n。\"); sc ($_.Name + '.Log') -v $arr}"
复制代码
作者: 屡败屡战 时间: 2018-7-18 09:58
老师好:我的电脑无法安装PowerShell,故无法执行PowerShell命令代码。我想求bat批处理代码。谢谢了!!
作者: yhcfsr 时间: 2018-7-18 13:07
本帖最后由 yhcfsr 于 2018-7-18 13:09 编辑
把问题发到群里来,你的问题还有些疑问之处.
如果按照WORD的段落定义,遇到换行才会分段.在BAT中,遇到换行符前,所有的字符都在一行.换句话说,按照WORD的说法,BAT中一行就是一段.
所以按2楼的逐行判断法,如果一行中有N个句号,则无法将这N个句号进行分割.极端的情况,如果全文只有一行,你将会无功而返.
作者: Batcher 时间: 2018-7-18 13:23
回复 6# 屡败屡战
你的电脑是什么操作系统?
作者: 屡败屡战 时间: 2018-7-18 17:44
本帖最后由 屡败屡战 于 2018-7-18 17:48 编辑
楼上老师说得太好了,一针见血。我的文档就是这种情况,整篇文章就只有一行(标题行不算)
整篇文章看得我眼花,故求助。
另外我的电脑系统是win7 64位,不知咋搞的,安装PowerShell脚本,总是提示失败
作者: yhcfsr 时间: 2018-7-18 19:11
回复 9# 屡败屡战
精简系统很可能无法安装.正常系统WIN7,需要先安装.NET 4.5,然后才能安装升级补丁.
不过还是有些电脑无法运行MSU更新包,必须解压,用DISM命令来安装更新.
我建议你加入论坛QQ群,方便交流,或者看我签名,加我QQ
作者: 屡败屡战 时间: 2018-7-18 19:24
那么能否将txt文本格式转换成word文件,从word文件替换方面想想办法
作者: yhcfsr 时间: 2018-7-18 20:47
本帖最后由 yhcfsr 于 2018-7-19 18:07 编辑
回复 11# 屡败屡战
如果只几个文本,参考5楼的的正则部分,用NOTEPAD++修改.
如果文件多,用以下脚本.保存为BAT- @set @n=0/*&echo off&set "script=%~f0"
- dir /a-d/s/b *.txt|cscript -nologo -e:jscript "%script%"
- pause&exit /b */
-
- //脚本与要处理的文件放一起
- //脚本会处理目录中所有TXT文件
-
- var n=4;//设置每n个句号换一次行
-
- var fso=new ActiveXObject('scripting.FileSystemObject')
- while(!WSH.StdIn.AtEndOfStream){
- var file=WSH.StdIn.ReadLine();
- fo=fso.OpenTextFile(file,1);
- content=fo.ReadAll();
- var re =new RegExp("(?:[^。]*。){"+n+"}(?!$)","gim")
- content=content.replace(re,'$&\r\n')
- fo.close();
- fo=fso.OpenTextFile(file,2);
- fo.Write(content);
- fo.close();
- }
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |