标题: [文本处理] 批处理或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 编辑
- @echo off
- set /a n=5,m=6
- set "v=批处理之家"
- for %%a in (*.txt) do (
- (for /f "usebackq delims=" %%b in ("%%a") do (
- set /a Lin+=1
- set "str=%%b"
- setlocal enabledelayedexpansion
- if !Lin! gtr %m% (echo,!str!
- ) else echo,!str:~,%n%!%v%!str:~%n%!
- endlocal
- ))>$
- move $ "%%a"&set "Lin="
- )
- 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次:- @echo off&SetLocal EnableDelayEdexpansion&cd /d "%~dp0"
- set /a n=5
- set /a m=(4-1)*n
- for /f "delims=" %%a in (11.txt) do (
- set "str=%%a"
- for /l %%a in (0 !n! !m!) do (
- for %%i in (!n!) do set /p=!str:~%%a,%%i!<nul
- set /p=批处理之家<nul
- )
- set /a mm=m+n
- for %%i in (!mm!) do set /p=!str:~%%i!<nul
- echo;
- )
- 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
这样呢?- @echo off&SetLocal EnableDelayEdexpansion
- set N=5&set M=4&set "s=批处理之家"
- set /a "M=M*(N-1),i=N-1"
- for /f "delims=" %%i in (test.txt) do (
- set var=&set "str=%%i"
- for /l %%j in (%N% %N% %M%) do (
- if "!str:~%n%!" neq "" (
- if defined str set "var=!var!!str:~,%N%!%s%"
- set str=!str:~%N%!
- )
- )
- if "!str:~%i%!" neq "" (
- set "var=!var!!str:~,%N%!%s%"
- set str=!str:~%N%!
- )
- echo;!var!!str!
- )
- 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个字符,换行重新插入。- set fso = createobject("scripting.filesystemobject")
- for each file in fso.getfolder(".").files
- ext = fso.getextensionname(file)
- if lcase(ext) = "txt" then MySub 5,7,"批处理之家"
- next
- msgbox "OK"
-
- sub MySub(n,m,v)
- set objTxt = fso.opentextfile(file)
- do until objTxt.atendofstream
- strLine = objTxt.readline
- redim ar(int(len(strline)/n))
- for i = 0 to ubound(ar)
- ar(i) = mid(strline,i*n+1,n)
- if s < m and len(ar(i)) = n then
- s = s + 1
- ar(i) = mid(strline,i*n+1,n) & v
- end if
- next
- str = str & join(ar,"") & vbcrlf
- loop
- objTxt.close :set objTxt = nothing
- fso.opentextfile(file,2,true).write str
- end sub
复制代码
测试文本:- 一个人命里不见得有太太或丈夫,但绝对不可没有朋友。ffff
- abcd
-
- 即使是荒岛上的鲁滨逊,也不免需要一个“礼拜五”
复制代码
修改后:- 一个人命里批处理之家不见得有太批处理之家太或丈夫,批处理之家但绝对不可批处理之家没有朋友。批处理之家ffff
- abcd
-
- 即使是荒岛批处理之家上的鲁滨逊批处理之家,也不免需要一个“礼拜五”。
复制代码
作者: 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 |