Board logo

标题: [文本处理] [已解决]求助批处理截取TXT指定内容 [打印本页]

作者: liziyunabcd    时间: 2023-4-14 12:45     标题: [已解决]求助批处理截取TXT指定内容

本帖最后由 liziyunabcd 于 2023-4-14 14:33 编辑

求助:截取指定内容下面有编号的行、段落,把这些内容另存为 "原来的TXT名子"+新的.txt。 这个新的TXT就生成在原来TXT边上。

TXT内容如下:

张学友
1、情网:
2、问你爱我有多情
3、情深深雨蒙蒙。
张学友是香港人,歌手,演员。   

截取后的内容为:
1、情网:
2、问你爱我有多情
3、情深深雨蒙蒙。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、
崩溃了,我用AI生成了最少十几次,没一次成功的,不得不来求助大神们了。
作者: qixiaobin0715    时间: 2023-4-14 12:52

  1. findstr /b "[1-9][0-9]*、" 1.txt>2.txt
复制代码

作者: liziyunabcd    时间: 2023-4-14 13:01

回复 2# qixiaobin0715

上面的代码真牛逼啊,一下把所有的编号都搜出来了

    卧槽.....  牛逼,可以呀.一下就出来了,大神,能不能加个搜索呢,搜索那个关键词“张学友”。

因为这个文本里还有其他的1、2、3、的编号.
作者: liziyunabcd    时间: 2023-4-14 13:41

刘得发:
1、《峰回路转》
2、《孤星泪》
3、《相思成灾》
刘得发是香港人,歌手,演员。
张学友
1、情网:
2、问你爱我有多情
3、情深深雨蒙蒙。
张学友是香港人,歌手,演员。


文本大概是这样子
作者: Batcher    时间: 2023-4-14 14:03

回复 4# liziyunabcd
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "delims=:" %%i in ('findstr /n /b "张学友" "1.txt"') do (
  4.     if not defined RowFlag (
  5.         set "RowBegin=%%i"
  6.         set "RowFlag=1"
  7.     ) else (
  8.         set "RowEnd=%%i"
  9.     )
  10. )
  11. call :GetList %RowBegin%
  12. exit /b
  13. :GetList
  14. (for /f "skip=%1 tokens=1* delims=:" %%a in ('findstr /n .* "1.txt"') do (
  15.     if %%a equ %RowEnd% (
  16.         exit /b
  17.     ) else (
  18.         echo,%%b
  19.     )
  20. ))>"2.txt"
复制代码

作者: Batcher    时间: 2023-4-14 14:12

回复 4# liziyunabcd


调用第三方命令行工具 sed.exe 比较简洁
http://bcn.bathome.net/s/tool/index.html?key=sed
  1. sed "/张学友/,/张学友/!d" 1.txt | findstr /v "张学友" > 2.txt
复制代码

作者: qixiaobin0715    时间: 2023-4-14 15:15

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1* delims=、" %%i in (1.txt) do (
  4.     if defined n (
  5.         set /a n+=1
  6.         if %%i equ !n! (echo,%%i、%%j) else set n=
  7.     ) else (
  8.         if %%i equ 张学友 set n=0
  9.     )
  10. ))>2.txt
  11. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2