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

[文本处理] 批处理实现删除指定行功能

@echo off
set /p m=请输入要删除的行
setlocal enabledelayedexpansion
del temp.txt 2>nul
for /f "tokens=*" %%i in (1.txt) do (
set /a n+=1
if !n! neq %m% echo %%i>>temp.txt
)
del 1.txt
ren temp.txt 1.txt
pause

========================

上面的代码可以实现删除a.txt文件中指定行的功能。
但现在的问题是:
1、我现在有一个文件夹,里面有N多的txt文件,文件名没有什么规律,我现在想删除每个文件的第一行,该怎么实现呢?
2、我发现这段代码在既使是删除一个文件中的第一行的时候运行效率也不是很高,关键在ren这句上吧?如果要是删除好几百个这样的文件的话,我想效率更不会太高的。怎么办呢?

上传一个文件,作为例子,大家尝试一下。

======================分割线===================
注:如果删除指定列呢?或者说可不可以通过这段代码改写出一个同时具有以下三个功能的P程序:
    a、可交互地指定被删除行
    b、可交互地指定被删除列
    c、可交互的同时指定被删除的行和列

如果困难,以分割线上方的问题为主。
谢谢。

回复 41# chm8624
求分享代码。谢谢!

TOP

回复 9# apang

为什么处理完,所有txt内容都是很多列~3。

TOP

回复 40# pcl_test


    谢谢!

::删除多余信息
@findstr /i /v /c:"Request timed out" /c:"TTL=" /c:"Start at" /c:"end at" /c:"Ping statistics"  "C:\00_EIS\1.txt" >>R1_1.txt
::删除空行
findstr /rc:"[^         ]"  "R1_1.txt" >>R2_1.txt
@pause

结果很完美了,
--------------------------------------------------  
2016/08/08 周一
20:03:18.32
Pinging google.com [74.125.130.138] with 32 bytes of data:
    Packets: Sent = 100, Received = 100, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 78ms, Maximum = 114ms, Average = 84ms
2016/08/08 周一
20:04:57.80
--------------------------------------------------  
--------------------------------------------------  
2016/08/08 周一
20:33:26.59
Pinging google.com [74.125.130.101] with 32 bytes of data:
    Packets: Sent = 100, Received = 99, Lost = 1 (1% loss),
Approximate round trip times in milli-seconds:
    Minimum = 81ms, Maximum = 83ms, Average = 81ms
2016/08/08 周一
20:35:09.60
--------------------------------------------------

TOP

本帖最后由 pcl_test 于 2016-8-11 16:54 编辑

回复 39# chm8624
  1. ::删除空行
  2. findstr /rc:"[^ ]" "1.txt"
复制代码
1

评分人数

TOP

回复 38# pcl_test

谢谢指导。

还有一点,如何删除 “空的行” 或者 屏蔽符比如 回车,空格等等。

@  命令行回显屏蔽符
FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]
  /I         指定搜索不分大小写。
  /V        只打印不包含匹配的行。
  /C:string 使用指定字符串作为文字搜索字符串。

TOP

回复 37# chm8624

cmd窗口查看 findstr /?命令

TOP

回复 36# pcl_test


    版主,你的代码很有效,我自己改了一下,使之输出到 文件:
@findstr /i /v /c:"Request timed out" /c:"TTL=" "C:\00_EIS\1.txt" >>RR_01.txt
@pause

能大概的讲解一下吗?
我只能够 猜到, "Request timed out"  表示 删除 带有 "Request timed out" 的那一行,"TTL="表示会删除 带有"TTL="的那一行

处理后的文本:
--------------------------------------------------  
Start at
2016/08/08 周一
20:03:18.32

Pinging google.com [74.125.130.138] with 32 bytes of data:

Ping statistics for 74.125.130.138:
    Packets: Sent = 100, Received = 100, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 78ms, Maximum = 114ms, Average = 84ms
end at
2016/08/08 周一
20:04:57.80
--------------------------------------------------  



待处理的文本:
--------------------------------------------------  
Start at
2016/08/08 周一
20:03:18.32

Pinging google.com [74.125.130.138] with 32 bytes of data:
Reply from 74.125.130.101: bytes=32 time=82ms TTL=41
Request timed out.
......
Reply from 74.125.130.101: bytes=32 time=82ms TTL=41

Ping statistics for 74.125.130.138:
    Packets: Sent = 100, Received = 100, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 78ms, Maximum = 114ms, Average = 84ms
end at
2016/08/08 周一
20:04:57.80
--------------------------------------------------

TOP

回复 35# chm8624

@findstr /i /v /c:"Request timed out" /c:"TTL=" "D:\1.txt"
@pause

TOP

回复 9# apang

你的功能是很好,
但是如果 是多行删除,如何操作??

能否修改成这样的一个批处理文件,谢谢了:
方案1
删除 文本1.txt 第7到 107行的内容,
删除 文本1.txt 第122(7+115)到225(107+115)行的内容,
...
删除  文本1.txt 第(7+115*x)到225(107+115*x)行的内容, 直至文本最后
行程形成新的文件2.txt


或者也可以是
方案2
读取 文本1.txt 第1到6 行的内容, 第108到115 行的内容 复制 写入 2.txt
读取 文本1.txt 第1+115*x到6+115*x 行的内容, 第108+115*x到115+115*x 行的内容 复制 写入 2.txt   直至文本最后
x不确定。

TOP

回复 33# ivor


    在吗?我给你发了私信,里面有我的QQ。我可以把代码的执行情况给你反映一下。

TOP

不知道丫

TOP

回复 3# ivor


    第二段代码我放到一个64位的 win7系统中使用是正确的,可以删除行了。
但是我想不是系统多少位的原因。

可是在我家里的机器上确实是不能删除行,这是为什么呢?

TOP

本帖最后由 hacker85 于 2012-2-6 20:42 编辑

回复 3# ivor


    第二段代码确实是没有删除行的功能,我反复测试了几次。比如删除第一行和第二列。
9楼的朋友上传了一份代码,可以实现同时删除。

TOP

回复 9# apang


    恩哼, 不错,你这个代码的功能是正确的。

TOP

返回列表