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

回复 14# CrLf


    为什么处理结果文本会出现   ECHO 处于关闭状态。

    插入的数据没有循环。

TOP

因为缺少了原代码中的一个判断:if !j! equ !i! set j=0
要能循环插入,貌似还是需要设置变量表。
1

评分人数

    • CrLf: 感谢指正技术 + 1
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 17# xxpinqz


确实如此,没多想就顺手删了
如果用变量表保存文本,基本没有可优化的空间
所以派生出两种办法:
1、为 %src% 中的每行生成包含 %count% 个此行的小文件,引用时直接 type,这办法简单易行,不过文件多得让你崩溃
2、仍用 set /p str= <%src% 的办法,但为了处理 %file% 多于 %src% 的情况,需要事先倍增 %src% 到临时文件,已修改
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p file=拖入需要修改的文件并回车:
  3. set/p src=拖入需要增加的文件并回车:
  4. set/p count=输入每隔多少行插入:
  5. set/p blank=输入插入多少行:
  6. set "n=%count%"
  7. for /f %%a in ('find /c /v ""^<%file%') do set file.count=%%a
  8. for /f %%a in ('find /c /v ""^<%src%') do set src.count=%%a
  9. findstr /v $ %src%&&echo;>>%src%
  10. copy /y %src% src.temp
  11. set /a loop.count = file.count / count / src.count
  12. for /l %%a in (1 1 %loop.count%) do copy /b src.temp+%src%
  13. (for /f "usebackq delims=" %%a in ("%file:"=%") do (
  14.   echo,%%a
  15.   set/a n-=1
  16.   if !n! leq 0 (
  17.     set "str="
  18.     set /p "str="
  19.     for /l %%b in (1 1 %blank%)do echo !str!
  20.     set "n=%count%"
  21.   )
  22. ))>new.txt <src.temp
  23. start new.txt
复制代码

TOP

用大量临时文件的办法(不推荐),只对顶楼方案进行小改造,减少耗时的操作:
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p file=拖入需要修改的文件并回车:
  3. set/p src=拖入需要增加的文件并回车:
  4. set/p count=输入每隔多少行插入:
  5. set/p blank=输入插入多少行:
  6. md 临时文件夹
  7. for /f "delims=" %%i in ('type %src%')do (
  8.   set/ai+=1
  9.   (for /l %%b in (1 1 %blank%)do echo,%%i)>临时文件夹\!i!.txt
  10. )
  11. (for /f "usebackq delims=" %%a in (%file%) do (
  12.   echo,%%a
  13.   set/a n+=1,m=n%%count
  14.   if !m! equ 0 (
  15.     set/aj+=1,j=j%%i+1
  16.     type 临时文件夹\!j!.txt
  17.   )
  18. ))>new.txt
  19. rd /s /q 临时文件夹
  20. start new.txt
复制代码

TOP

回复 19# CrLf


    谢谢 可以了

TOP

  1. /*&cls
  2. @echo off
  3. set /p file=拖入需要插入数据的文件并按回车:
  4. set /p src=拖入数据文件并按回车:
  5. set /p count=输入每隔多少行插入数据并按回车:
  6. set /p blank=输入每行数据插入多少次并按回车:
  7. cscript -nologo -e:jscript "%~f0" "%file%" "%src%" "%count%" "%blank%"
  8. pause&exit
  9. */
  10. if(!WSH.Arguments(0)||!WSH.Arguments(1)||!WSH.Arguments(2)||!WSH.Arguments(3)||!/[1-9][0-9]*/.test(WSH.Arguments(2))||!/[1-9][0-9]*/.test(WSH.Arguments(3)))WSH.echo('输入有误');
  11. var fso = new ActiveXObject('Scripting.FileSystemObject');
  12. var a = fso.OpenTextFile(WSH.Arguments(0), 1);
  13. var b = fso.OpenTextFile(WSH.Arguments(1), 1);
  14. var c = fso.CreateTextFile('结果.txt', 2);
  15. var btext = b.ReadAll().split(/\r?\n/);
  16. var n=m=0;
  17. while(!a.AtEndOfStream){
  18.     var line = a.ReadLine();
  19.     n++;
  20.     if(n%WSH.Arguments(2)==0){
  21.         var s='';
  22.         for(var i=0; i<WSH.Arguments(3); i++){
  23.             s+=btext[m]+'\r\n';
  24.         }
  25.         if(m==btext.length-1){m=0}else m++;
  26.         c.Write(line+'\r\n'+s);
  27.     }else c.Writeline(line);
  28. }
复制代码

TOP

第三方http://www.bathome.net/s/tool/index.html?key=gawk
  1. #* 2>nul 3>nul&cls&@echo off
  2. #*&set /p file=拖入需要插入数据的文件并按回车:
  3. #*&set /p src=拖入数据文件并按回车:
  4. #*&set /p count=输入每隔多少行插入数据并按回车:
  5. #*&set /p blank=输入每行数据插入多少次并按回车:
  6. #*&gawk -f "%~f0" "%file%" "%src%" "%count%" "%blank%"&pause&exit
  7. BEGIN{
  8.     result="结果.txt";
  9.     while(getline<ARGV[2]>0){
  10.         i++;b[i]=$0;
  11.     }
  12.     m=1;
  13.     while(getline<ARGV[1]>0){
  14.         n++;
  15.         if(n%ARGV[3]==0){
  16.             s="";
  17.             for(i=0; i<ARGV[4]; i++){
  18.                 s=s""b[m]"\n";
  19.             }
  20.             if(m==length(b)){m=1}else m++;
  21.             printf $0"\n"s>result;
  22.         }else print $0>result;
  23.     }
  24. }
复制代码

TOP

返回列表