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

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

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

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


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

这个有能实现的vbs、软件或批处理吗?

本帖最后由 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
复制代码

TOP

不能实现那效果

TOP

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

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

怎么实现?

TOP

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



    举个例吧,亲
修改前文档什么样子,修改后又是什么样子

TOP

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


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

TOP

回复 6# qhefun


    请把所有需求都更新到顶楼

TOP

本帖最后由 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
复制代码

TOP

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


没出来什么效果

TOP

没出来什么效果
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
复制代码

TOP

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


这个也不行的。。。

TOP

回复 11# qhefun
是否考虑编码问题

TOP

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


编码为ANSI。

TOP

笨办法,保存为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. 即使是荒岛批处理之家上的鲁滨逊批处理之家,也不免需要一个“礼拜五”。
复制代码

TOP

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



你所说的没什么效果是源文件没变化吗??
代码是把修改后的文字显示到cmd窗口。

TOP

返回列表