标题: [文本处理] 【已解决】批处理如何文件夹下提取所有txt文件的固定位置字符和某一行合并? [打印本页]
作者: willurpimd 时间: 2023-4-13 08:33 标题: 【已解决】批处理如何文件夹下提取所有txt文件的固定位置字符和某一行合并?
本帖最后由 willurpimd 于 2023-4-18 08:50 编辑
哪位大神帮下,用bat批处理:
在一个文件夹里所有txt文档(几百个)的格式相同,分隔符间隔
需要将每个文档第二行第一列的字符串作为新txt文档的第二列第一个字符串,后面跟着每个文档的第五行所有字符,将每个文档按行排列进行组成,生成新的txt文件
比如文件夹所有文档的格式是:
ID User Recipe
#21 Unknown S11
12 11 23
aa bb cc
0.25 351 352 852 854 8541
eg er er er
新的行显示
#21 0.25 351 352 852 854 8541
然后每个txt按行排列成新的一个txt文件
下面的云盘内有3个测试文件
https://wwlf.lanzoue.com/i2id90suy4re
作者: Batcher 时间: 2023-4-13 08:37
回复 1# willurpimd
请选2个txt文件打包上传到网盘,以便测试代码。
作者: willurpimd 时间: 2023-4-13 08:58
回复 2# Batcher
好的,已上传
https://wwlf.lanzoue.com/i2id90suy4re
作者: czjt1234 时间: 2023-4-13 10:15
新的txt文件,文件内容如何?- ID User Recipe
- #21 0.25 351 352 852 854 8541
- #25 35 121 562 82 345 534
- #28 455 67 743 12 235 124
复制代码
还是- #21 0.25 351 352 852 854 8541
- #25 35 121 562 82 345 534
- #28 455 67 743 12 235 124
复制代码
作者: willurpimd 时间: 2023-4-13 10:33
回复 4# czjt1234
是第二个
作者: qixiaobin0715 时间: 2023-4-13 10:43
- @echo off
- setlocal enabledelayedexpansion
- (for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
- for /f "tokens=1,2* delims=: " %%i in ('findstr /n . "%%a"^|findstr "^2: ^5:"') do (
- if %%i equ 5 echo,!str! %%j %%k
- set str=%%j
- )
- ))>New.txt
- pause
复制代码
作者: willurpimd 时间: 2023-4-15 22:46
回复 6# qixiaobin0715
感谢,能否解释下语句的意思?
作者: hfxiang 时间: 2023-4-16 11:07
回复 1# willurpimd - gawk -vOFS="\t" "FNR==2{a=$1}FNR==5{print a,$0}" "D:\data\*.txt">"D:\Result\NEW.txt"
复制代码
http://bcn.bathome.net/tool/4.1.0/gawk.exe
作者: terse 时间: 2023-4-16 11:53
处理文件多的话 可以这样处理- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
- set n=0
- set "str="
- for /f "skip=1 usebackq tokens=1*" %%i in ("%%a") do (
- if defined str (
- set /a n+=1
- if !n! equ 3 (echo,!str! %%i %%j)
- ) else set str=%%i
- )
- ))>res.txt
复制代码
作者: willurpimd 时间: 2023-4-18 08:50
回复 9# terse
确实运行速度很快,感谢!
作者: qixiaobin0715 时间: 2023-4-18 09:52
如果总是取文本以#号开头的行及其后第3行作为目标的话,实际上使用一个for循环也能解决:- @echo off
- setlocal enabledelayedexpansion
- (for /f "tokens=1* delims= " %%i in ('type *.txt 2^>nul') do (
- set "str1=%%i"
- if "!str1:~,1!"=="#" (
- set "str2=%%i"
- set n=0
- ) else if defined n (
- set /a n+=1
- if !n! equ 3 (
- echo,!str2! %%i %%j
- set n=
- )
- )
- ))>New.txt
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |