Board logo

标题: [文本处理] 【已解决】BAT:批量提取txt文本内特定位置的数据 [打印本页]

作者: 思想之翼    时间: 2014-11-4 00:23     标题: 【已解决】BAT:批量提取txt文本内特定位置的数据

D:/数据1/内有若干txt文本,命名为1.txt  2.txt  3.txt...
每个txt文本内有2行数据,格式为(数据间隔为TAB):
64        67        64        69        64        67        65        63        ......       
           2           0           6          6         0         8           6        ......
详见附件。
每个文本中,若第1行的第2列之后的数据,有等于第1行第1列的数据,则提取该对应列的第2行数据,写入D:/数据2/,文本名称与D:/数据1/中的文本名称相同。
比如:D:/数据1/1.txt文本中,  第1行第1列数据为64,而第1行的第3列、第5列的数据也为64,则提取第2行的第3列、第5列的数据0 6,写入D:/数据2/1.txt文本  数据格式为 0  6(数据横排,间隔为空格)
作者: terse    时间: 2014-11-4 01:20

  1. @echo off
  2. set ph=数据1
  3. md "数据2" 2>nul
  4. for /f "delims=" %%f in ('dir /b "%ph%\*.txt"') do (
  5.     setlocal enabledelayedexpansion
  6.     for /f "tokens=1*usebackq" %%a in ("%ph%\%%f") do (
  7.         if defined s1 (
  8.            for %%i in (!s2!) do (
  9.                set /a n+=1
  10.                if "!s1!" equ "%%i" set _!n!=1
  11.            )
  12.            set n=0
  13.            for %%i in (%%a %%b) do (
  14.                set /a n+=1
  15.                if defined _!n! set s=!s! %%i
  16.            )
  17.            
  18.         ) else set s1=%%a&set s2=%%b
  19.     )
  20.     if defined s >"数据2\%%f" echo!s!
  21.     endlocal
  22. )
  23. pause
复制代码

作者: 思想之翼    时间: 2014-11-4 14:29

回复 2# terse

感谢帮助。还望继续得到您的帮助。
先前提问时有个疏忽:当第2列之后所有第1行的数据,没有与第1列第1行的数据相同,则取同名称的空文本写入文件夹“数据2”
现在是,没有相同的数据,则不提取。
作者: terse    时间: 2014-11-4 17:05

回复 3# 思想之翼

代码20行 改为下面试
  1. (for /f "tokens=*" %%i in ("!s!") do echo;%%i)>"数据2\%%f"
复制代码

作者: 思想之翼    时间: 2014-11-4 17:33

回复 4# terse


    感谢!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2