中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-07 13:34
48,040 主题排行 / 350,125 发帖 / 今日 0 篇 / 48,252 会员排行
DOS批处理 & 脚本技术(批处理室) » [已解决]在文本中删除指定多个不连续的字符串所在行
可打印版本  1,927 / 15
第1楼 suntb 发表于 2008-02-19 19:05
高级用户 发帖 277 积分 581
[已解决]在文本中删除指定多个不连续的字符串所在行
下面是删除单个字符(串)所在行的代码,如果要以空格为间隔符一次性输入多个字符(串)以实现删除含这些字符(串)的所在行,应该要如何修改代码?



[ Last edited by suntb on 2008-2-24 at 11:05 AM ]
第2楼 lxmxn 发表于 2008-02-19 20:15
版主 发帖 4,938 积分 11,386
你这样应该可以了,试试。。。
第3楼 suntb 发表于 2008-02-19 23:48
高级用户 发帖 277 积分 581
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 ]
第4楼 suntb 发表于 2008-02-20 00:02
高级用户 发帖 277 积分 581
夜深了 先下线了 明天再上来看看

有知道的兄弟指点下 俺还是DOS新手
第5楼 lxmxn 发表于 2008-02-20 00:09
版主 发帖 4,938 积分 11,386
第6楼 suntb 发表于 2008-02-20 00:14
高级用户 发帖 277 积分 581
可能是我语言表达不是很清楚

我的意思是说:
这个文本内容并不是固定的,以上的内容仅是个示例
要排除的字符或字符串每次都有变动,所以要通过set /p进行数据输入,多个字符或字符串之间用空格作为间隔符号
比如上面要排除2和a的话就是“set /p=”后要输入“2 a”
然后根据输入的这些字符或字符串对文本进行处理,将同时存在这些字符或字符串的所在行删除

[ Last edited by suntb on 2008-2-20 at 12:19 AM ]
第7楼 fastslz 发表于 2008-02-20 00:45
铂金会员 发帖 2,315 积分 5,493 来自 上海
语言表达确实不够清楚,是不是这意思?
第8楼 suntb 发表于 2008-02-20 13:54
高级用户 发帖 277 积分 581
Originally posted by fastslz at 2008-2-20 00:45:
语言表达确实不够清楚,是不是这意思?
第9楼 terse 发表于 2008-02-20 13:59
银牌会员 发帖 946 积分 2,404
我也来一个 不知道楼主是不是这个意思
@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
)
第10楼 abcd 发表于 2008-02-20 14:05
银牌会员 发帖 739 积分 1,436


这样??
第11楼 suntb 发表于 2008-02-20 14:11
高级用户 发帖 277 积分 581
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 ]
第12楼 suntb 发表于 2008-02-20 14:14
高级用户 发帖 277 积分 581
Originally posted by abcd at 2008-2-20 14:05:
第13楼 lxmxn 发表于 2008-02-20 16:32
版主 发帖 4,938 积分 11,386

就用这个笨方法吧。
第14楼 terse 发表于 2008-02-20 17:24
银牌会员 发帖 946 积分 2,404
练习一个 简单测试成功
@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
第15楼 suntb 发表于 2008-02-20 19:02
高级用户 发帖 277 积分 581
谢谢13楼lxmxn版主和14楼terse的解答
两套代码都测试可行

lxmxn谦虚说是”笨办法“ 那不就是说我更笨???晕了

事实证明:往往笨办法也能很好地解决问题
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023