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

[文本处理] 求助改进循环将一个文本的每一行重复指定次数后按每隔指定行数插入到另一个文本

本帖最后由 pcl_test 于 2016-8-9 18:18 编辑

我有一个bat,但是处理时间太长了,如何让这个bat处理速度变快
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p file=拖入需要修改的文件并回车:
  3. set/p src=拖入需要增加的文件并回车:
  4. set/p count=输入每隔多少行插入:
  5. set/p blank=输入插入多少行:
  6. for /f "delims=" %%i in ('type %src%')do set/ai+=1&set "#!i!=%%i"
  7. (for /f "usebackq delims=" %%a in (%file%) do (
  8.   echo,%%a
  9.   set/a n+=1,m=n%%count
  10.   if !m! equ 0 set/aj+=1&for /l %%b in (1 1 %blank%)do for %%i in (!j!)do echo,!#%%i!
  11.   if !j! equ !i! set j=0
  12. ))>new.txt
  13. start new.txt
复制代码
这个bat数据处理速度太慢了,请教一下大神怎么样才能变成快速?

本帖最后由 BAT1 于 2015-4-18 15:52 编辑

文件有多大?搞个样本试试.

TOP

这个是插入数据
这个是源文件
都是随便写的,测试用

TOP

回复 2# BAT1


看楼上。。

TOP

求帮忙。

TOP

回复 3# q4911


    真实的“原文件.txt”和“插入数据.txt”分别有多大?使用顶楼的代码处理需要多长时间?
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

回复 6# gawk


   真实原文件大概是10~20MB,插入数据大概是几十KB。
  因为上传文件不能提交超过一定MB的文件,只要把源文件的内容随便一直往下复制到一定大小就可以测试了。插入数据也可以随便写。
  之前我的处理时间至少要十分钟吧。

TOP

回复 7# q4911


    传到百度网盘吧
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

纯批来处理这么大文件,不死机算好了。。。
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 8# gawk


测试的文本我上传到百度网盘了 http://pan.baidu.com/s/1eQ90DPK

TOP

本帖最后由 CrLf 于 2015-4-28 16:24 编辑

这么大的变量表,读写起来非常慢的
尤其是你的代码中以 # 开头的一大坨变量在变量表中太靠前,严重影响 j、n 等高频变量的引用耗时,简单的办法是把 # 改成 x、y、z 之类比较靠后的变量,并在引用之后立即把没用的变量删除,就会快多了
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p file=拖入需要修改的文件并回车:
  3. set/p src=拖入需要增加的文件并回车:
  4. set/p count=输入每隔多少行插入:
  5. set/p blank=输入插入多少行:
  6. for /f "delims=" %%i in ('type %src%')do set/ai+=1&set "z!i!=%%i"
  7. set "n=%count%"
  8. (for /f "usebackq delims=" %%a in ("%file:"=%") do (
  9.   echo,%%a
  10.   set/a n-=1
  11.   if !n! leq 0 (
  12.     for %%i in (!j!)do set "str=!#%%i!"&set "#%%i="
  13.     for /l %%b in (1 1 %blank%)do echo !str!
  14.     set "n=%count%"
  15.   )
  16. ))>new.txt
  17. start new.txt
复制代码

TOP

回复 11# CrLf


  如何通过  gawk 或者 sed 来加速处理bat呢?

TOP

本帖最后由 CrLf 于 2015-4-28 16:44 编辑

这样可能更好,避开大坨变量:
  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 "usebackq delims=" %%a in ("%file:"=%") do (
  8.   echo,%%a
  9.   set/a n-=1
  10.   if !n! leq 0 (
  11.     set "str="
  12.     set /p "str="
  13.     for /l %%b in (1 1 %blank%)do echo !str!
  14.     set "n=%count%"
  15.   )
  16. ))>new.txt <%src%
  17. start new.txt
复制代码

TOP

实测13楼方案隔2行插入2次耗时如下:
  1. start at 16:43:49.16
  2. end at 16:47:12.32
复制代码
合计约3分半钟

同样设置下,顶楼方案的日志:
  1. start at 16:50:16.46
复制代码
截至发此帖时(17:35)仍在运行...

提升后的效率应该达到楼主的要求吧
1

评分人数

    • q4911: 问题解决了技术 + 1

TOP

回复 14# CrLf


    确实快了 很多 谢谢大神

TOP

返回列表