中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-02 18:01
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教: 如何用批处理删除文本文件中以指定字符开始的行? 查看 1,782 回复 9
楼 主 请教: 如何用批处理删除文本文件中以指定字符开始的行? 发表于 2006-12-18 04:45 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
20年会员
UID 49283
性别 男
状态 离线
请教: 如何用批处理删除文本文件中以指定字符开始的行?
比如想删除1.txt中以aaa空格“aaa ”为开始的行。谢谢?
Windows 一键还原
http://www.yjhy.com
2 发表于 2006-12-18 05:11 ·  中国 甘肃 兰州 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
copy 1.txt 2.txt
sed "/^aaa /d" 2.txt|more>1.txt
del 2.txt
3 发表于 2006-12-18 05:15 ·  中国 浙江 杭州 电信
中级用户
★★
积分 305
发帖 85
注册 2005-05-23 00:00
21年会员
UID 39004
性别 男
状态 离线
4 发表于 2006-12-18 05:26 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  若要考虑特殊字符,可以使用下面的演示代码(但是就无法避免在每行的首位都要加引号):

@echo off
for /f "delims=" %%i in ('findstr /n .* 1.txt') do call :intercept "%%i☆"
pause
goto :eof

:intercept
set str=%1
set "str=%str:~1,-1%"
set "str=%str:*:=%"
if not "%str:~0,4%"=="aaa " echo "%str:~0,-1%"
goto :eof

  若无须考虑连接符号,则可以使用如下演示代码:

@echo off
for /f "delims=" %%i in ('findstr /n .* 1.txt') do call :intercept "%%i☆"
pause
goto :eof

:intercept
set str=%1
set str=%str:~1,-1%
set str=%str:*:=%
if not "%str:~0,4%"=="aaa " echo.%str:~0,-1%
goto :eof

  以上代码不直接用 delims=: 是为了防止行首的冒号被抛弃;用 findstr /n .* 的格式是为了不忽略以分号开头的行;给 %%i 加引号是为了对付空格,在 %%i 后加星号,是为了对付空行;第二段代码用 echo 后加了一个点号,也是为了对付空行。总之,用 for 语句处理文本要注意的事项比较多,可视具体文本增删语句的某些部分。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
5 发表于 2006-12-18 06:27 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
20年会员
UID 49283
性别 男
状态 离线
这段时间在这里得到了各位的大力帮助,谢谢各位了。

这几种代码都试了,好像都不行。
我要把aaa 开头的行,整行删除掉。

[ Last edited by lianjiang2004 on 2006-12-18 at 07:06 AM ]
Windows 一键还原
http://www.yjhy.com
6 发表于 2006-12-18 21:01 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
19年会员
UID 63486
来自 河北廊坊
状态 离线
这可奇了。我试过vkill和namejm兄的代码后没有问题啊。确如楼主要求,去掉了aaa开头的行。
不如楼主将你测试用的文本内容贴上来,大家一起看看。
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
7 发表于 2006-12-18 23:13 ·  中国 北京 联通
银牌会员
★★★
努力做坏人
积分 1,185
发帖 438
注册 2006-08-28 12:00
19年会员
UID 61449
来自 北京
状态 离线
试试下面一句是否管用???

findstr /b /v /c:"aaa " test.txt
我今后在论坛的目标就是做个超级坏人!!!
8 发表于 2006-12-19 00:57 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
20年会员
UID 49283
性别 男
状态 离线
比如我想把下面文件中以rem 开头的行删除。
---------------
@Echo Off
Rem 第一次完成这段代码,不足和错误在所难免。
mode con: cols=76 lines=26
Set TT=WangZQ的 gghost 绿色备份恢复工具 卸载程序
COLOR 2F
TITLE %TT%

:uninstall0

echo.
echo 谢谢使用 gghost 绿色备份恢复工具 v2.0
echo =============================
echo.
echo 1. 卸载gghost后,自动恢复安装gghost到启动项
echo 所进行的文件修改,复原至原样。
echo.
Echo 2. 若设置了管理员密码,自动卸载需输入管理员密码。
echo.
pause

if %pwda%==0 goto uninstall

cls
Echo.
Echo.
Set /P unins_0=请先输入管理员密码:
If %unins_0%==%pwda% Goto uninstall
cls
Echo.
Echo Sorry! 管理员密码错误,不可自动卸载,按任意键结束 。。。
pause>nul
Goto Exit


:uninstall
cls
echo.
echo 正在卸载。。。
Rem 彻底清除本工具及自动生成的备用文件。
if exist c:\w_boot.ini goto sub_34a >nul


:sub_18d

[ Last edited by lianjiang2004 on 2006-12-19 at 07:21 AM ]
Windows 一键还原
http://www.yjhy.com
9 发表于 2006-12-19 01:42 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  呵呵,还是 9527 兄的代码简洁,我绕了个大圈子了。

  借用 9527 兄的代码,可以写成这样:

@echo off
findstr /b /i /v /c:"Rem " 1.txt>2.txt
start 2.txt

  注意要加上参数 /i 来忽略大小写。

[ Last edited by namejm on 2006-12-18 at 12:46 PM ]
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
10 发表于 2006-12-19 02:13 ·  中国 安徽 马鞍山 电信
金牌会员
★★★★
积分 3,946
发帖 1,884
注册 2006-01-20 13:00
20年会员
UID 49283
性别 男
状态 离线
可以了,谢谢各位。
Windows 一键还原
http://www.yjhy.com
论坛跳转: