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

[文本处理] 【已解决】批处理如何文件夹下提取所有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

回复 1# willurpimd


    请选2个txt文件打包上传到网盘,以便测试代码。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher


好的,已上传
https://wwlf.lanzoue.com/i2id90suy4re

TOP

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

QQ 20147578

TOP

回复 4# czjt1234


   是第二个

TOP

  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

评分人数

TOP

回复 6# qixiaobin0715

感谢,能否解释下语句的意思?

TOP

回复 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

TOP

处理文件多的话 可以这样处理
  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
复制代码

TOP

回复 9# terse


  确实运行速度很快,感谢!

TOP

如果总是取文本以#号开头的行及其后第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
复制代码

TOP

返回列表