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

[文本处理] 如何根据指定文本中的行间规律将段落分别写进不同的txt中

本帖最后由 pcl_test 于 2017-7-21 04:29 编辑

如何用bat 提取1.txt中两个指定字符串之间的内容然后分别生成到不同txt 中
text.txt文本内容如下:

>>IN 1111
222
>>IN 333
444
>>IN 555
666
>>IN 777
888
888
>>IN 654
999999

我想把
>>IN 1111
222 生成到a.txt

>>IN 333
444 生成到b.txt

>>IN 555
666 生成到c.txt

>>IN 777
888 生成到d.txt
依次类推,请教大家。

谢谢两位  3L代码已经解决了我的问题  用字母做名字更方便后续工作

TOP

本帖最后由 qazplm 于 2017-7-21 12:38 编辑

回复 3# taofan712

没错,要超过26段怎么办?所以要将楼主的思维强制“掰弯”,懂的不应该被不懂的带错了道
另外,如果真要用字母,可以用偏移法,就不需要call和findstr拖累效率了
  1. setlocal enabledelayedexpansion
  2. set s=abcdefghijklmnopqrstuvwxyz
  3. set n=0
  4. for /f "delims=" %%a in ('type "test.txt"') do (
  5.     for /f %%b in ("%%a") do (
  6.         if "%%b" equ ">>IN" (
  7.             for %%i in (!n!) do set "fn=!s:~%%i,1!.txt"
  8.             set /a n+=1
  9.         )
  10.         >>"!fn!" echo;%%a
  11.     )
  12. )
复制代码

TOP

用递增数字做文件名岂不是很简单,非要用abcd...
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d %~dp0
  4. for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
  5.   set /a n+=1
  6.   set #!n!=%%a
  7. )
  8. for /f "delims=" %%a in (test.txt) do (
  9.   for /f %%b in ("%%a") do (
  10.     if "%%b"==">>IN" (
  11.       call :cn fn
  12.       echo;%%a>>!fn!.txt
  13.     ) else (
  14.       echo;%%a>>!fn!.txt
  15.     )
  16.   )
  17. )
  18. echo;处理完毕&pause>nul&exit /b
  19. :cn
  20. set /a m+=1
  21. for /f "tokens=2 delims==" %%i in ('set #^|findstr "#!m!="') do set fn=%%i
  22. endlocal &set %~1=!fn! &goto :eof
复制代码
1

评分人数

    • smallming: 感谢给帖子标题标注[已解决]字样技术 + 1

TOP

和这个问题很类似,但我的txt中需要重复提取行与行之间内容,并且文件名有变化。
http://www.bathome.net/thread-26239-1-1.html

TOP

返回列表