Board logo

标题: [文本处理] 批处理或VBS如何将多个txt文本每隔指定字符数插入一个指定字符串? [打印本页]

作者: qhefun    时间: 2013-1-11 16:03     标题: 批处理或VBS如何将多个txt文本每隔指定字符数插入一个指定字符串?

本帖最后由 pcl_test 于 2016-10-16 15:14 编辑

有多个TXT文档,每篇TXT文档隔500字插入“霏凡”一次,插入4次终止(即每篇TXT插入4次“批处理”)。。。


PS:如果上面的实现起来麻烦的话,那么所有TXT每篇隔500字只插入一次“批处理”也行的。

这个有能实现的vbs、软件或批处理吗?
作者: apang    时间: 2013-1-11 19:24

本帖最后由 apang 于 2013-1-11 20:16 编辑
  1. @echo off
  2. set /a n=5,m=6
  3. set "v=批处理之家"
  4. for %%a in (*.txt) do (
  5.   (for /f "usebackq delims=" %%b in ("%%a") do (
  6.     set /a Lin+=1
  7.     set "str=%%b"
  8.     setlocal enabledelayedexpansion
  9.     if !Lin! gtr %m% (echo,!str!
  10.     ) else echo,!str:~,%n%!%v%!str:~%n%!
  11.     endlocal
  12.   ))>$
  13.   move $ "%%a"&set "Lin="
  14. )
  15. pause
复制代码

作者: qhefun    时间: 2013-1-11 20:48

不能实现那效果
作者: qhefun    时间: 2013-1-11 20:50

本帖最后由 qhefun 于 2013-1-11 20:53 编辑

换种问法:
想在文稿中,每隔n个字符开始插入几个给定的文字(比如:批处理之家),插入第m次即停止插入?

怎么实现?
作者: apang    时间: 2013-1-11 21:37

换种问法:
想在文稿中,每隔n个字符开始插入几个给定的文字(比如:批处理之家),插入第m次即停止插入? ...
qhefun 发表于 2013-1-11 20:50



    举个例吧,亲
修改前文档什么样子,修改后又是什么样子
作者: qhefun    时间: 2013-1-11 21:55

举个例吧,亲
修改前文档什么样子,修改后又是什么样子
apang 发表于 2013-1-11 21:37


比如:N篇TXT的文章中,我要在每篇中每隔5个文字就插入“批处理之家”一次,插入4次后就终止插入。。。
举例:一个人命里批处理之家不见得有太批处理之家太或丈夫,批处理之家但绝对不可批处理之家没有朋友。即使是荒岛上的鲁滨逊,也不免需要一个“礼拜五”。
作者: BAT-VBS    时间: 2013-1-11 23:20

回复 6# qhefun


    请把所有需求都更新到顶楼
作者: QIAOXINGXING    时间: 2013-1-11 23:45

本帖最后由 QIAOXINGXING 于 2013-1-11 23:49 编辑

每5个字符,插入4次:
  1. @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
  2. set /a n=5
  3. set /a m=(4-1)*n
  4. for /f "delims=" %%a in (11.txt) do (
  5.   set "str=%%a"
  6.   for /l %%a in (0 !n! !m!) do (
  7.     for %%i in (!n!) do set /p=!str:~%%a,%%i!<nul
  8.     set /p=批处理之家<nul
  9.   )
  10.   set /a mm=m+n
  11.   for %%i in (!mm!) do set /p=!str:~%%i!<nul
  12.   echo;
  13. )
  14. pause
复制代码

作者: qhefun    时间: 2013-1-11 23:54

本帖最后由 qhefun 于 2013-1-11 23:59 编辑
每5个字符,插入4次:
QIAOXINGXING 发表于 2013-1-11 23:45


没出来什么效果
作者: terse    时间: 2013-1-12 02:13

没出来什么效果
qhefun 发表于 2013-1-11 23:54

这样呢?
  1. @echo off&SetLocal EnableDelayEdexpansion
  2. set N=5&set M=4&set "s=批处理之家"
  3. set /a "M=M*(N-1),i=N-1"
  4. for /f "delims=" %%i in (test.txt) do (
  5.     set var=&set "str=%%i"
  6.     for /l %%j in (%N% %N% %M%) do (
  7.         if "!str:~%n%!" neq "" (
  8.            if defined str set "var=!var!!str:~,%N%!%s%"
  9.            set str=!str:~%N%!
  10.         )
  11.     )
  12.     if "!str:~%i%!" neq "" (
  13.        set "var=!var!!str:~,%N%!%s%"
  14.        set str=!str:~%N%!
  15.     )
  16.        echo;!var!!str!
  17. )
  18. pause
复制代码

作者: qhefun    时间: 2013-1-12 02:18

这样呢?
terse 发表于 2013-1-12 02:13


这个也不行的。。。
作者: terse    时间: 2013-1-12 12:20

回复 11# qhefun
是否考虑编码问题
作者: qhefun    时间: 2013-1-12 13:02

回复  qhefun
是否考虑编码问题
terse 发表于 2013-1-12 12:20


编码为ANSI。
作者: apang    时间: 2013-1-12 13:51

笨办法,保存为test.vbs
每5个字符插入一次,插入7次。如果一行不够7次插入,或不够5个字符,换行重新插入。
  1. set fso = createobject("scripting.filesystemobject")
  2. for each file in fso.getfolder(".").files
  3.    ext = fso.getextensionname(file)
  4.    if lcase(ext) = "txt" then MySub 5,7,"批处理之家"
  5. next
  6. msgbox "OK"
  7. sub MySub(n,m,v)
  8.    set objTxt = fso.opentextfile(file)
  9.    do until objTxt.atendofstream
  10.       strLine = objTxt.readline
  11.       redim ar(int(len(strline)/n))
  12.       for i = 0 to ubound(ar)
  13.          ar(i) = mid(strline,i*n+1,n)
  14.          if s < m and len(ar(i)) = n then
  15.             s = s + 1
  16.             ar(i) = mid(strline,i*n+1,n) & v
  17.          end if
  18.       next
  19.       str = str & join(ar,"") & vbcrlf
  20.    loop
  21.    objTxt.close :set objTxt = nothing
  22.    fso.opentextfile(file,2,true).write str
  23. end sub
复制代码
测试文本:
  1. 一个人命里不见得有太太或丈夫,但绝对不可没有朋友。ffff
  2. abcd
  3. 即使是荒岛上的鲁滨逊,也不免需要一个“礼拜五”
复制代码
修改后:
  1. 一个人命里批处理之家不见得有太批处理之家太或丈夫,批处理之家但绝对不可批处理之家没有朋友。批处理之家ffff
  2. abcd
  3. 即使是荒岛批处理之家上的鲁滨逊批处理之家,也不免需要一个“礼拜五”。
复制代码

作者: QIAOXINGXING    时间: 2013-1-12 15:36

没出来什么效果
qhefun 发表于 2013-1-11 23:54



你所说的没什么效果是源文件没变化吗??
代码是把修改后的文字显示到cmd窗口。
作者: qhefun    时间: 2013-1-12 23:41

这个批处理不好写吗?
作者: Batcher    时间: 2013-1-14 21:37

回复 16# qhefun


    14楼的代码你怎么看?
作者: qhefun    时间: 2013-1-15 11:19

笨办法,保存为test.vbs
每5个字符插入一次,插入7次。如果一行不够7次插入,或不够5个字符,换行重新插入 ...
apang 发表于 2013-1-12 13:51


这个办法可行,感谢apang热心的帮助。。。(稍微有点缺陷的是,一行的字数要是少于要间隔的字数,就得换行),不过,能出来这样的效果已经很不容易了。。。再次感谢!!!
这几天,因为刚接触批处理,所以问题问得急点,心态不够平和,对于个别热心帮助的朋友的回复,没有给予及时的反馈,在此,对于那些热心的朋友表示衷心的感谢。。。
以后,自己慢慢去琢磨,问题也不会问得这么密集了,希望能跟大家一起进步。。。
作者: a5321    时间: 2020-12-23 11:35

谢谢分享啊




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2