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

[文本处理] 【已解决】批处理如何将文本内容按指定字数分行(如15个字自动换行)?

本帖最后由 pcl_test 于 2016-8-15 13:36 编辑

例文:
的打斗场面令人震撼可谓招招见拳拳到肉记者倪自放囘力街区有望月上映保罗飙车神技将再现由基美影业与囯欧罗巴联合出品囯际著名导演吕克贝松身兼三职担纲监制制片编剧的动作电影囘力街区有望在今年月登陆囯内院线作为吕克贝松风靡全球的经典动作电影囘力区的升级版该片还是好莱坞巨星速度与激囘情系列主演保罗沃克最后一部完整遗囘作曰前该片 的打……
处理后效果:
的打斗场面令人震撼可谓招招见拳
拳到肉记者倪自放囘力街区有望月
上映保罗飙车神技将再现由基美影
业与囯欧罗巴联合出品囯际著名导
演吕克贝松身兼三职担纲监制制片
……
你哪位大神能够教教我,在此感激不尽了…

  1. 1>1/* :Bat+JScript
  2. @echo off
  3. cscript -nologo -e:jscript "%~0" <a.txt >b.txt
  4. pause & exit /b
  5. */
  6. WSH.Echo(
  7. WSH.StdIn.ReadAll().replace(/.{15}/gm,"$&\r\n")
  8. )
复制代码

TOP

回复 2# CrLf
非常完美,非常感谢!!

TOP

回复 2# CrLf

    您好!您给我的这段代码很好!
但是为什么直接在其前面加其他功能代码  就出现错误呢? 我试了,让它建成单独bat,用call 调用可以。我希望所有批量处理都在一个bat里面,执行A代码之后 再执行上述代码 之后再执行C代码。这样如何做?希望能得到您的帮助!
比如:
sed -n  "s/[A-Za-z0-9]//g" BT.txt>BT.tx &rem 说明:去空格,所有行合并。
1>1/* :Bat+JScript
@echo off
cscript -nologo -e:jscript "%~0" <BT.tx >BT1.tx
  pause exit /b
*/

WSH.Echo(
        WSH.StdIn.ReadAll().replace(/.{250}/gm,"$&\r\n")
)
————————————————————————不能执行。

TOP

  1. @echo off&setlocal enabledelayedexpansion&pushd %~dp0
  2. set var=&for /f "delims=" %%i in (a.txt) do set "var=!var!%%i"&set "var=!var: =!"
  3. :lp
  4. echo %var:~,15%&set "var=%var:~15%"
  5. if defined var goto lp
  6. pause
复制代码

TOP

回复 5# dqcmjx

是个死循环

TOP

本帖最后由 dqcmjx 于 2015-1-28 13:06 编辑

回复 6# ruoru376

我测试正常,截图怎么传不上去

TOP

回复 6# ruoru376


真的不行的,一直在动。原文件,没有任何变动……对于Bat 我基本不懂。你说你测试能行?不敢相信

TOP

批处理的特殊字符一直是个痛点,若讲兼容性好些的,还就用 CrLf 的BJ混排的方案比较好。楼上所出现的异常,多半跟其中的几个括号"()"有关。
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

回复 4# ruoru376


    BJ混排技术可以参照以下链接:
http://bbs.bathome.net/viewthrea ... &from=favorites
是利用JScript的特殊多行注释或条件编译语句,将批处理脚本包含其中,这种特殊技术要同时满足批处理脚本不会异常退出,并且第一行是合法的JS条件语句或注释语法。在批处理脚本部分,在合适的地方利用 goto :eof或者exit /b等方法及时跳出脚本而避免接下来的JScript部分被错误解析。
所以就你的添加代码来讲,应该添至/**/之间的合适部分,则可作为批处理脚本被解析,否则在脚本被作为JScript文件载入时会因用法不符合JScript语法而报错。
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

回复 10# amwfjhh

不能解决问题,还是非常感谢你的回答!
我只要想用二楼的代码,因为发现效率比较高速度快。有没有什么方法在一个bat里面调用啊? 另建一个bat,再调用时可以的,但是很麻烦……

TOP

本帖最后由 amwfjhh 于 2015-1-28 16:08 编辑

用这个试试
测试文本:1.txt
  1. 的打斗场面令人震!<>"~%&*()撼可谓招招见拳拳到肉记者倪自放囘力街区有望月上映保罗飙车神技将再现由基美影业与囯欧罗巴联合出品囯际著名导演吕克贝松身兼三职担纲监制制片编剧的动作电影囘力街区有望在今年月登陆囯内院线作为吕克贝松风靡全球的经典动作电影囘力区的升级版该片还是好莱坞巨星速度与激囘情系列主演保罗沃克最后一部完整遗囘作曰前该片 的打……
  2. 的打斗场面令人震撼可谓招招见拳拳到!<>"~%&*()肉记者倪自放囘力街区有望月上映保罗飙车神技将再现由基美影业与囯欧罗巴联合出品囯际著名导演吕克贝松身兼三职担纲监制制片编剧的动作电影囘力街区有望在今年月登陆囯内院线作为吕克贝松风靡全球的经典动作电影囘力区的升级版该片还是好莱坞巨星速度与激囘情系列主演保罗沃克最后一部完整遗囘作曰前该片 的打……
  3. 的打斗场面令人震撼可!<>"()~%&*谓招招见拳拳到肉记者倪自放囘力街区有望月上映保罗飙车神技将再现由基美影业与囯欧罗巴联合出品囯际著名导演吕克贝松身兼三职担纲监制制片编剧的动作电影囘力街区有望在今年月登陆囯内院线作为吕克贝松风靡全球的经典动作电影囘力区的升级版该片还是好莱坞巨星速度与激囘情系列主演保罗沃克最后一部完整遗囘作曰前该片 的打……
  4. 的打斗场面令人震撼可谓招招见拳拳到肉记者倪自放囘力街区有望月上!<>"~%()&*映保罗飙车神技将再现由基美影业与囯欧罗巴联合出品囯际著名导演吕克贝松身兼三职担纲监制制片编剧的动作电影囘力街区有望在今年月登陆囯内院线作为吕克贝松风靡全球的经典动作电影囘力区的升级版该片还是好莱坞巨星速度与激囘情系列主演保罗沃克最后一部完整遗囘作曰前该片 的打……
复制代码
处理脚本:
  1. @echo oFF
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('find /c /v ""^<"1.txt"') do set /a "nLines=%%i"
  4. (
  5.   for /l %%i in (1 1 %nLines%) do (
  6.     echo,第 %%i 行格式化显示...
  7.     set /p "strLine="
  8.     echo,原始内容 : "!strLine!"
  9.     call :_showFormat "strLine"
  10.     set "strLine="
  11.     echo,&echo,
  12.   )
  13. )<"1.txt"
  14. pause & goto :EOF
  15. :_showFormat
  16. (
  17. if defined %~1 (
  18.   set "strFormat=!%~1!"
  19.   set "strTmp=!strFormat:~0, 15!"
  20.   echo,!strTmp!
  21.   
  22.   set "strFormat=!strFormat:~15!"
  23.   if defined strFormat (
  24.     call :_showFormat "strFormat"
  25.   )
  26. )
  27.   goto :EOF
  28. )
复制代码
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

本帖最后由 tmplinshi 于 2015-1-28 15:11 编辑

回复 4# ruoru376


要把 sed 命令或者其他的放在 /* 和 */ 之间。
因为 cscript -nologo -e:jscript "%~0" 这句是把这个批处理文件作为 js 脚本来调用的,所以整个文件的代码也要符合 js 的语法。
/* 和 */ 之间是作为 js 中的注释,所以你可以把批处理代码放在里面。
1>1/* :Bat+JScript
@echo off
代码放在这里
cscript -nologo -e:jscript "%~0" <a.txt >b.txt
pause & exit /b
*/

WSH.Echo(
        WSH.StdIn.ReadAll().replace(/.{15}/gm,"$&\r\n")
)

在这个例子中,你的 sed 命令也可以这样对接:
  1. sed "s/[A-Za-z0-9]//g" BT.txt | cscript -nologo -e:jscript "%~0" >b.txt
复制代码
或者直接用 js 代码取代这个 sed 命令:
  1. WSH.Echo(
  2.         WSH.StdIn.ReadAll()
  3.                 .replace(/.{15}/gm, "$&\r\n")
  4.                 .replace(/[A-Za-z0-9]/g, "")
  5. )
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set "str=%%i"
  4.     call :splitString
  5. )
  6. pause&exit
  7. :splitString
  8. if not "!str!"=="" (
  9.     echo,!str:~,15!&set "str=!str:~15!"&goto :splitString
  10. ) else (
  11.     goto :eof
  12. )
复制代码
我原来以为回复过了。你试下。
踏实一些点.不要着急.你想要的时间都会给你.2

TOP

回复 13# tmplinshi
学习了,谢谢。
如果是for 怎么对接呢?比如:for /f "tokens=*" %%i in (a.tx) do set /p "var=%%i;" <nul >>b.tx

TOP

返回列表