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

[文本处理] [已解决]求助批处理批量删除文本行数?

[复制链接]
发表于 2025-8-18 13:48:10 | 显示全部楼层 |阅读模式
本帖最后由 a574045075 于 2025-8-18 18:34 编辑

批处理如何批量删除文本行数,例如第2行 第5行 第8行 第11行等等如此类推,怎么做呢?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2025-8-18 14:15:01 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-8-18 14:21 编辑

回复 1# a574045075

  1. sed -i "2d;5d;8d;11d" *.txt
复制代码
直接修改源文件。
从本坛第三方下载sed.exe,落地即用,与被处理文件 *.txt 同目录。

评分

参与人数 1技术 +1 收起 理由
77七 + 1 感谢分享

查看全部评分

 楼主| 发表于 2025-8-18 14:21:56 | 显示全部楼层
回复 2# aloha20200628


    试了,只能处理2 5 8 11行,文本里面有几万行需要处理.
发表于 2025-8-18 14:34:33 | 显示全部楼层
回复 3# a574045075


    你这个几万行,是保存在一个文本文件里的吗?
发表于 2025-8-18 14:52:43 | 显示全部楼层
回复 3# a574045075


如何知道这几万行的明细?而且每个文件的删除要求都一致吗
 楼主| 发表于 2025-8-18 15:09:34 | 显示全部楼层
回复 5# aloha20200628


文件
链接: https://pan.baidu.com/s/1xcu3IlaVphcDlfuR8W4lfQ?pwd=fnt3 提取码: fnt3
 楼主| 发表于 2025-8-18 15:11:38 | 显示全部楼层
回复 4# czjt1234


    文本里面有几万行,删除第2行 第5行 第8行 第11行 第14行......等等如此类推.
 楼主| 发表于 2025-8-18 15:13:13 | 显示全部楼层
回复 5# aloha20200628


    文本里面有几万行,删除第2行 第5行 第8行 第11行 第14行......等等如此类推.  只需要处理一个文本.
发表于 2025-8-18 17:36:07 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"
  3. @REM 输入文本文件
  4. set "src=1.txt"
  5. @REM 输出文本文件
  6. set "dst=2.txt"
  7. @REM 起始行
  8. set "begin=2"
  9. @REM 行间距
  10. set "step=3"
  11. setlocal enableDelayedExpansion
  12. (
  13.   set n=0
  14.   for /f "usebackq delims=" %%A in ("%src%") do (
  15.     set /a "n+=1"
  16.     if !n! lss %begin% (
  17.       echo %%A
  18.     ) else (
  19.       set /a "m=(n-begin)%%step"
  20.       if !m! neq 0 echo %%A
  21.     )
  22.   )
  23. )>"%dst%"
  24. endlocal
  25. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
a574045075 + 1 谢谢

查看全部评分

发表于 2025-8-18 17:58:38 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-8-26 14:22 编辑

回复 8# a574045075

假设被删除行序号呈等差数列,假设每行长度少于8K字符量,试用以下批处理代码

  1. @echo off &(for /f "tokens=1* delims=:" %%a in ('findstr /n ".*" 1.txt') do for /f %%n in ('set/a "(2*%%a-1)%%3" ') do if %%n neq 0 echo,%%b)>2.txt
  2. pause&exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
a574045075 + 1 谢谢

查看全部评分

 楼主| 发表于 2025-8-18 18:33:00 | 显示全部楼层
回复 9# flashercs


    好了,谢谢!
 楼主| 发表于 2025-8-18 18:33:15 | 显示全部楼层
回复 10# aloha20200628


    好了,谢谢!
发表于 2025-8-20 16:48:42 | 显示全部楼层
回复 1# a574045075

用sed( http://bcn.bathome.net/tool/4.9/sed.exe )的实现方式如下:

  1. sed "2~3d" "1.txt">"2.txt"
复制代码

评分

参与人数 1技术 +1 收起 理由
77七 + 1 感谢分享

查看全部评分

发表于 2025-8-26 11:41:46 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-8-26 14:23 编辑


经复查和实测,不用外部脚本也不开启变量延迟的10楼代码有一个缺陷,是在 for /f...() 的外部命令管道中频繁调用批处内置命令如 set/a... 致使反复开启cmd进程而效率降低,改用以下版本(虽开启变量延迟但仍可规避!字符拦截)会使效率明显提升...

  1. @echo off &findstr /n ".*" 1.txt>#.$
  2. (for /f "tokens=1* delims=:" %%a in (#.$) do (
  3.    set "v=%%b" &set/a "n=(2*%%a-1)%%3" &setlocal enabledelayedexpansion
  4.    if !n! neq 0 echo,!v!
  5.    endlocal ))>2.txt
  6. del /q "#.$" &pause&exit/b
复制代码
发表于 2025-8-26 12:22:43 | 显示全部楼层
回复 14# aloha20200628


   大佬,这个几万行的文本,用for /f in (findstr) 应该只“加载”就需要不少时间吧..
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:06 , Processed in 0.039257 second(s), 16 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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