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

[文本处理] 批处理怎样实现文本选择性的重新排版?

您好,谢谢你的帮助了。

现有文本A.TXT,内容如下:
  1. 你好我是谁
  2. 不知道
  3. <div class="tupian"><span></span></div>
  4. 啊,啊啊,22SS,随时随地
  5. suishisuidi
  6. 你好我是谁
  7. 不知道
  8. <div class="tupian"><span></span></div>
  9. 啊,啊啊,22SS,随时随地
  10. suishisuidi
  11. 你好我是谁
  12. 不知道
  13. <div class="tupian"><span></span></div>
  14. 啊,啊啊,22SS,随时随地
  15. suishisuidi
  16. 你好我是谁
  17. 不知道
  18. <div class="tupian"><span></span></div>
  19. 啊,啊啊,22SS,随时随地
  20. suishisuidi
  21. 你好我是谁
  22. 不知道
  23. <div class="tupian"><span></span></div>
  24. 啊,啊啊,22SS,随时随地
  25. suishisuidi
复制代码
每组内容中间的空行不一定, 内容格式是一样的。
想要实现的效果是: 每组内容中第三行的<div #&@*#&@*#</div> ,移动到第2行的文字的末尾。
  1. 你好我是谁
  2. 不知道<div class="tupian"><span></span></div>
  3. 啊,啊啊,22SS,随时随地
  4. suishisuidi
  5. 你好我是谁
  6. 不知道<div class="tupian"><span></span></div>
  7. 啊,啊啊,22SS,随时随地
  8. suishisuidi
  9. 你好我是谁
  10. 不知道<div class="tupian"><span></span></div>
  11. 啊,啊啊,22SS,随时随地
  12. suishisuidi
  13. 你好我是谁
  14. 不知道<div class="tupian"><span></span></div>
  15. 啊,啊啊,22SS,随时随地
  16. suishisuidi
  17. 你好我是谁
  18. 不知道<div class="tupian"><span></span></div>
  19. 啊,啊啊,22SS,随时随地
  20. suishisuidi
复制代码

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set m=0
  4. for /f "delims=" %%a in ('findstr /n ".*" test.txt') do (
  5.     set "str=%%a"
  6.     if "!str:*:=!"=="" (
  7.         echo,
  8.         set m=0
  9.     ) else (
  10.         set /a m+=1
  11.         if !m!==2 (
  12.             set str1=!str:*:=!
  13.         ) else if !m!==3 (
  14.             echo,!str1!!str:*:=!
  15.         ) else (
  16.             echo,!str:*:=!
  17.         )
  18.     )
  19. )
  20. pause
复制代码

TOP

来个字节的
  1. powershell "[IO.File]::WriteAllBytes(\"$(gl)\结果.txt\", [byte[]]([regex]::Replace(((gc '.\a.txt' -read 0 -enc Byte) -join ','),'(13,)?10,60,','60,') -split ','))"
复制代码
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

这样要比2楼的代码要通用一些:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set m=0
  4. (for /f "delims=" %%a in ('findstr /n ".*" a.txt') do (
  5.     set "str=%%a"
  6.     if "!str:*:=!"=="" (
  7.         if defined str1 echo !str1!
  8.         set str1=
  9.         echo,
  10.     ) else (
  11.         set "str=!str:*:=!"
  12.         if not "!str:~0,1!"=="<" (
  13.             if defined str1 echo !str1!
  14.             set str1=!str!
  15.         ) else (
  16.             echo !str1!!str!
  17.             set str1=
  18.         )
  19.     )
  20. )
  21. echo !str1!)>b.txt
  22. pause
复制代码

TOP

本帖最后由 WHY 于 2021-3-6 19:35 编辑
  1. sed -r ":a; N; /\n(<div)/!ba; s//\1/" a.txt > b.txt
复制代码
  1. gawk "BEGIN{RS=\"\n^<div\"}{if(flag)printf s\"^<div\";else flag=1;s=$0}END{printf s}" a.txt > b.txt
复制代码

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('findstr /n .* a.txt') do (
  4.     set "curLine=%%i"
  5.     set "curLine=!curLine:*:=!"
  6.     if defined flag (
  7.         if "!curLine:~0,4!" NEQ "<div" (
  8.             echo;!preLine!
  9.         ) else (
  10.             set /p "=!preLine!" <nul
  11.         )
  12.     ) else (
  13.         set flag=1
  14.     )
  15.     set "preLine=!curLine!"
  16. )
  17. if defined flag echo;!preLine!
  18. pause
复制代码

TOP

回复 6# WHY


    求教一下WHY大大,想请您帮忙实现一下。 下面这段代码中(路径为/桌面/1.txt)一共有3组内容,每5行内容为1组。每组内容的最后都是一串数字(已加粗显示)。
请问能否用JS的形式写一下。 获取变量{shuzi}中的数字,把它所在的那一整组内容都删掉。(定位到数字所在行,删除掉包括数字所在行 及 向上的4行内容[共5行/一组])。
效果在最后。
  1. 星月夜|c7肘的博丽灵梦1
  2. <div class="tip2">…………</div>
  3. 博丽灵梦
  4. ,博丽灵梦,
  5. [b]3484454411[/b]
  6. 星月夜|c7肘的博丽灵梦2
  7. <div class="tip2">…………</div>
  8. 博丽灵梦
  9. ,博丽灵梦,
  10. [b]34844544222[/b]
  11. 星月夜|c7肘的博丽灵梦3
  12. <div class="tip2">…………</div>
  13. 博丽灵梦
  14. ,博丽灵梦,
  15. [b]348445443333[/b]
复制代码
假设变量 {shuzi}的内容为34844544222 ,就删除掉了第2组,从而结果如下:
  1. 星月夜|c7肘的博丽灵梦1
  2. <div class="tip2">…………</div>
  3. 博丽灵梦
  4. ,博丽灵梦,
  5. [b]3484454411[/b]
  6. 星月夜|c7肘的博丽灵梦3
  7. <div class="tip2">…………</div>
  8. 博丽灵梦
  9. ,博丽灵梦,
  10. [b]348445443333[/b]
复制代码
谢谢!

TOP

返回列表