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

[文本处理] [已解决]BAT如何将文本逐行数据相加,的数达到额定值行提取另存?

本帖最后由 a000000_82 于 2013-8-23 20:06 编辑

麻烦各位大神帮忙写个批。



条件与内容如下:


“第三季检工号汇总”文件夹内有文本数量0001.txt~9xxx.txt

如0001.txt和9xxx.txt内容为:

(0001.txt)文本内容为:

0001.txt:001,003,001,
0001.txt:005,
0001.txt:005,005,060,
0001.txt:009,000,
0001.txt:003,003,003,003,033


(9xxx.txt)文本内容为:

9xxx.txt:008,080,
9xxx.txt:012,xxx,xxx,xxx,xxx.xxx,xxx,xxx,xxx,
9xxx.txt:030,xxx,xxx,xxx,000,015,
9xxx.txt:002,075,


每个文本行数1~90不固定,数据列数不固定,单个数值为000,~090,数值不固定。


批处理实现效果为:

额定值设定可调。

设定为45时,也就是单行数据相加后的数为45的行提取出来存入:检工额定\45.txt

如45.txt内容为:

0001.txt:003,003,003,003,033
0999.txt:011,021,013,
9xxx.txt:030,xxx,xxx,xxx,000,015,




批的要求说明:

bat、sed、gawk都可以。


请大神帮忙,谢谢~~~

  1. @echo off&setlocal enabledelayedexpansion
  2. set files=检工额定
  3. pushd "D:\第三季检工号汇总\"
  4. md "%files%" 2>nul
  5. set m=45
  6. (for %%i in (*.txt) do (
  7. for /f "tokens=2 delims=:" %%j in (%%i) do (
  8. for /f "tokens=* delims=,0" %%k in ("%%j") do set str=%%k
  9. for /L %%k in (1,1,2) do set "str=!str:,0=,!"
  10. set /a "n=!str:,=+!+0"
  11. if !n! equ %m% echo %%i:%%j
  12. )
  13. ))>"%files%\%m%.txt"
  14. popd
  15. pause
复制代码
1

评分人数

TOP

谢谢terse !!

    经测用冒号前的(1.txt:000,)没能原样显示,另请帮忙把该批改成能同时提取4~5个指定值。

           谢谢~~

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (5,45,80,30,160) do set ".%%a=1"
  3. md "D:\检工额定\" 2>nul
  4. pushd "D:\第三季检工号汇总\"
  5. for %%i in (*.txt) do (
  6.     for /f "tokens=1,2 delims=:" %%a in (%%i) do (
  7.         set "str=,%%b,"
  8.         for /l %%c in (1,1,2) do set "str=!str:,0=,!"
  9.         set /a "n=0!str:,=+!0"
  10.         if defined .!n! >>"D:\检工额定\!n!.txt" echo,%%a:%%b
  11.     )
  12. )
  13. pause
复制代码
1

评分人数

TOP

回复 3# a000000_82
这里冒号前内容是否和文件名不一致 我在这里是取文件名

TOP

谢谢terse 、apang !

    两个批都很好用,裹心感谢两位达人~~~~。

terse的评分明天补上。

TOP

返回列表