找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20731|回复: 10

[文本处理] 【已解决】批处理如何文件夹下提取所有txt文件的固定位置字符和某一行合并?

[复制链接]
发表于 2023-4-13 08:33:23 | 显示全部楼层 |阅读模式
本帖最后由 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
发表于 2023-4-13 08:37:28 | 显示全部楼层
回复 1# willurpimd


    请选2个txt文件打包上传到网盘,以便测试代码。
 楼主| 发表于 2023-4-13 08:58:04 | 显示全部楼层
回复 2# Batcher


好的,已上传
https://wwlf.lanzoue.com/i2id90suy4re
发表于 2023-4-13 10:15:45 | 显示全部楼层
新的txt文件,文件内容如何?
  1. ID        User        Recipe
  2. #21        0.25        351        352        852        854        8541
  3. #25        35        121        562        82        345        534
  4. #28        455        67        743        12        235        124
复制代码
还是
  1. #21        0.25        351        352        852        854        8541
  2. #25        35        121        562        82        345        534
  3. #28        455        67        743        12        235        124
复制代码
 楼主| 发表于 2023-4-13 10:33:18 | 显示全部楼层
回复 4# czjt1234


   是第二个
发表于 2023-4-13 10:43:43 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  4.     for /f "tokens=1,2* delims=:        " %%i in ('findstr /n . "%%a"^|findstr "^2: ^5:"') do (
  5.         if %%i equ 5 echo,!str!        %%j        %%k
  6.         set str=%%j
  7.     )
  8. ))>New.txt
  9. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
willurpimd + 1 乐于助人

查看全部评分

 楼主| 发表于 2023-4-15 22:46:41 | 显示全部楼层
回复 6# qixiaobin0715

感谢,能否解释下语句的意思?
发表于 2023-4-16 11:07:36 | 显示全部楼层
回复 1# willurpimd

  1. 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
发表于 2023-4-16 11:53:11 | 显示全部楼层
处理文件多的话 可以这样处理
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  3.      set n=0
  4.      set "str="
  5.      for /f "skip=1 usebackq tokens=1*" %%i in ("%%a") do (
  6.           if defined str (
  7.              set /a n+=1
  8.              if !n! equ 3 (echo,!str!        %%i        %%j)
  9.           ) else set str=%%i
  10.     )
  11. ))>res.txt
复制代码
 楼主| 发表于 2023-4-18 08:50:01 | 显示全部楼层
回复 9# terse


  确实运行速度很快,感谢!
发表于 2023-4-18 09:52:39 | 显示全部楼层
如果总是取文本以#号开头的行及其后第3行作为目标的话,实际上使用一个for循环也能解决:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1* delims=        " %%i in ('type *.txt 2^>nul') do (
  4.     set "str1=%%i"
  5.     if "!str1:~,1!"=="#" (
  6.         set "str2=%%i"
  7.         set n=0
  8.     ) else if defined n (
  9.         set /a n+=1
  10.         if !n! equ 3 (
  11.             echo,!str2!        %%i        %%j
  12.             set n=
  13.         )
  14.     )
  15. ))>New.txt
  16. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 21:29 , Processed in 0.022636 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表