中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]在文本中删除指定多个不连续的字符串所在行
作者:
标题: [已解决]在文本中删除指定多个不连续的字符串所在行 上一主题 | 下一主题
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『楼 主』:  [已解决]在文本中删除指定多个不连续的字符串所在行

下面是删除单个字符(串)所在行的代码,如果要以空格为间隔符一次性输入多个字符(串)以实现删除含这些字符(串)的所在行,应该要如何修改代码?
@echo off
echo.&set /p str=请输入你要排除的字符:
if exist temp.txt (cd.>temp.txt)
findstr /r /v "^.*%str%.*" test.txt >>temp.txt
call temp.txt
[ Last edited by suntb on 2008-2-24 at 11:05 AM ]


2008-2-19 19:05
查看资料  发短消息  网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

你这样应该可以了,试试。。。


2008-2-19 20:15
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 3 楼』:  

Originally posted by lxmxn at 2008-2-19 20:15: 你这样应该可以了,试试。。。
lxmxn版主 我的意思是说输入单字符或连续的字符串是可行了 现在想要用输入多个不连续的字符或字符串怎么用findstr删除所在行? 比如说文本test.txt内容如下 12346 abnod kjfdo46 52dfw 7a83ljd2fd a29jdll b23565a 要删除同时含字符a以及数字2的行(不管a和2是否连在一起,示例中最后三行都应该去除掉) a与2并不是固定值,有可能是其他字符;也不是固定的2个,有可能是更多个 通过set /p进行一次性输入多个字符或字符串(中间用空格间隔) 如何使用findstr达到删除同时存在这些字符或字符串所在行的要求? [ Last edited by suntb on 2008-2-19 at 11:55 PM ]


2008-2-19 23:48
查看资料  发短消息  网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 4 楼』:  

夜深了 先下线了 明天再上来看看 有知道的兄弟指点下 俺还是DOS新手


2008-2-20 00:02
查看资料  发短消息  网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  

@echo off
findstr "2" test.txt|findstr "a">temp1.txt
findstr /v /g:temp1.txt test.txt>temp.txt
del temp1.txt
temp.txt


2008-2-20 00:09
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 6 楼』:  

可能是我语言表达不是很清楚 我的意思是说: 这个文本内容并不是固定的,以上的内容仅是个示例 要排除的字符或字符串每次都有变动,所以要通过set /p进行数据输入,多个字符或字符串之间用空格作为间隔符号 比如上面要排除2和a的话就是“set /p=”后要输入“2 a” 然后根据输入的这些字符或字符串对文本进行处理,将同时存在这些字符或字符串的所在行删除 [ Last edited by suntb on 2008-2-20 at 12:19 AM ]


2008-2-20 00:14
查看资料  发短消息  网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 7 楼』:  

语言表达确实不够清楚,是不是这意思?
@echo off
echo.&set /p str=请输入你要排除的字符,多个字符格式例:abc def:
call :xxx "%str%"
call temp.txt
pause
exit

:xxx
if "%~1"=="" goto:eof
if exist temp.txt (cd.>temp.txt)
findstr /v "%~1" test.txt >>temp.txt
goto:eof




2008-2-20 00:45
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 8 楼』:  

Originally posted by fastslz at 2008-2-20 00:45: 语言表达确实不够清楚,是不是这意思? [code]@echo off echo.&set /p str=请输入你要排除的字符,多个字符格式例:abc def: call :xxx "%str%" call temp ...
回7楼的fastslz兄 我要的是输入的多个字符存在同一行时将该行删除 如果我输入"2 5",只有当该行同时出现"2"和"5"时才将其删除 刚才试了下你给的代码,输入"2 5",会将含2或含5的所在行全删除


2008-2-20 13:54
查看资料  发短消息  网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 9 楼』:  

我也来一个 不知道楼主是不是这个意思 @echo off if exist temp.txt (cd.>temp.txt) echo.&set /p str=请输入你要排除的字符 call :xxx %str% temp.txt pause exit :xxx for /f "delims=" %%a in (t.txt) do ( echo %%a|findstr /i "%~1" | findstr /i "%~2" &&shift ||echo %%a >>temp.txt )




简单!简单!再简单!
2008-2-20 13:59
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 10 楼』:  

@echo off
echo.&set /p str=请输入你要排除的字符,多个字符格式例:abc def:
set str=%str: =.*%
call :xxx "%str%"
call temp.txt
pause
exit

:xxx
if "%~1"=="" goto:eof
if exist temp.txt (cd.>temp.txt)
findstr /v "%~1" test.txt >>temp.txt
goto:eof
这样??


2008-2-20 14:05
查看资料  发短消息  网志  OICQ (470237592)  编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 11 楼』:  

Originally posted by terse at 2008-2-20 13:59: 我也来一个 不知道楼主是不是这个意思 @echo off if exist temp.txt (cd.>temp.txt) echo.&set /p str=请输入你要排除的字符 call :xxx %str% temp.txt pause exit :x ...
terse兄的代码中
for /f "delims=" %%a in (t.txt) do (
要改为
for /f "delims=" %%a in (test.txt) do (
测试发现有些问题: 一是如果只输入单个字符时此代码提示“FINDSTR: 没有搜索字符串” 二是同时输入三个以上字符时也会出错,如输入“2 5 a”会将只含“5”和“2”的"52dfw"也包含在内 代码要求是输入字符或字符串的个数不限,以空格为间隔符 [ Last edited by suntb on 2008-2-20 at 02:19 PM ]


2008-2-20 14:11
查看资料  发短消息  网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 12 楼』:  

Originally posted by abcd at 2008-2-20 14:05: [code]@echo off echo.&set /p str=请输入你要排除的字符,多个字符格式例:abc def: set str=%str: =.*% call :xxx "%str%" call temp.txt pause exit :xxx if &q ...
abcd兄的代码在输入字符顺序与文本中相同时可行,但是当顺序不同时就不正确了 比如说输入“2 5”则“b23565a”会被删除,但是也含有“2”和“5”的“52dfw”不会被删除


2008-2-20 14:14
查看资料  发短消息  网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 13 楼』:  

@echo off & setlocal EnableDelayedExpansion

set /p keywords=请输入关键字,用空格分开:
copy test.txt tem_.txt
for %%a in (%keywords%) do (
	findstr "%%a" tem_.txt>tem1.txt
	del tem_.txt & ren tem1.txt tem_.txt
)

findstr /v /g:tem_.txt test.txt > newfile.txt
del tem_.txt
start notepad newfile.txt
就用这个笨方法吧。


2008-2-20 16:32
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 14 楼』:  

练习一个 简单测试成功 @echo off if exist temp.txt (cd.>temp.txt) set /p str=请输入要排除的字符 for /f "delims=" %%a in (test.txt) do ( set n= set var=%%a call :loop %str% ) start "" temp.txt goto :eof :loop echo %var%|findstr /i "%1" >nul shift IF ERRORLEVEL 1 ( set n=str if "%1" == "" >>temp.txt echo %var%&&goto :eof goto loop ) if defined n >>temp.txt echo %var%&&goto :eof if not "%1" == "" goto loop




简单!简单!再简单!
2008-2-20 17:24
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
suntb
高级用户





积分 581
发帖 277
注册 2006-12-23
状态 离线
『第 15 楼』:  谢谢13楼lxmxn版主和14楼terse的解答

两套代码都测试可行 lxmxn谦虚说是”笨办法“ 那不就是说我更笨???晕了 事实证明:往往笨办法也能很好地解决问题


2008-2-20 19:02
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: