标题: [文本处理] 【已解决】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
- @echo off
- set ph=数据1
- md "数据2" 2>nul
- for /f "delims=" %%f in ('dir /b "%ph%\*.txt"') do (
- setlocal enabledelayedexpansion
- for /f "tokens=1*usebackq" %%a in ("%ph%\%%f") do (
- if defined s1 (
- for %%i in (!s2!) do (
- set /a n+=1
- if "!s1!" equ "%%i" set _!n!=1
- )
- set n=0
- for %%i in (%%a %%b) do (
- set /a n+=1
- if defined _!n! set s=!s! %%i
- )
-
- ) else set s1=%%a&set s2=%%b
- )
- if defined s >"数据2\%%f" echo!s!
- endlocal
- )
- pause
复制代码
作者: 思想之翼 时间: 2014-11-4 14:29
回复 2# terse
感谢帮助。还望继续得到您的帮助。
先前提问时有个疏忽:当第2列之后所有第1行的数据,没有与第1列第1行的数据相同,则取同名称的空文本写入文件夹“数据2”
现在是,没有相同的数据,则不提取。
作者: terse 时间: 2014-11-4 17:05
回复 3# 思想之翼
代码20行 改为下面试- (for /f "tokens=*" %%i in ("!s!") do echo;%%i)>"数据2\%%f"
复制代码
作者: 思想之翼 时间: 2014-11-4 17:33
回复 4# terse
感谢!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |