![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 15:22 |
共 48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已解决]在文本中删除指定多个不连续的字符串所在行 |
| 可打印版本 1,937 / 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: 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 |