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

[文本处理] 【已解决】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(数据横排,间隔为空格)

回复 4# terse


    感谢!

TOP

回复 3# 思想之翼

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

TOP

回复 2# terse

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

TOP

  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
复制代码

TOP

返回列表