中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 求一个很有挑战的批处理。 上一主题 | 下一主题
gucheng
新手上路





积分 6
发帖 2
注册 2007-2-7
状态 离线
『楼 主』:  求一个很有挑战的批处理。

各位老大,请教一个批处理。我有多组5个数ID,例如
12345
12356
01234
13456
12456
01456     等等
还有一些3个数的,例如
123
134
156
012
013  等等很多
需要的是验证每组5码ID里,是否都存在3个ID里的任意一个或多个号,例如123就在以上5码ID里都有,12345=123  12356=123 01234=123 13456=13 12456=12 01456=1,这样123就保留.
再例如:689  12345=0  12356=1 01234=0 13456=1 12456=1 01456=1,689在以上5个数的ID里有一组 12345没有689,这样689就要删除。
就是5个数字里面必须全包括3个数字里的一个或多个,这3个数子才能保留
5个数字里面有任意一组不包括3个数字里的任意一个,这3个数子就删除

说明:01456  12345.... 都是由小到大排列的   ,123 134....也是由小到大排列的

这个批处理可以解决大多数的3码,但是有拉的,麻烦大虾看一下,错在哪
del ok.txt
del temp.txt
del temp1.txt
del temp2.txt
setlocal enabledelayedexpansion
for /f %%i in (2.txt) do (
set cat=%%i
set dog=!cat:~0,1!
findstr   !dog! 1.txt>temp.txt
set dog=!cat:~1,1!
findstr   !dog! temp.txt>temp1.txt
set dog=!cat:~2,1!
findstr   !dog! temp1.txt>temp2.txt
findstr . temp2.txt >nul 2>nul&&echo !cat!>>ok.txt)

1.txt  为5个数字,2.txt 为3个数字的, ok.txt 为结果

请各位看看问题出在那里

2008-6-20 13:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 2 楼』:  

楼主是不是想复杂了:
@echo off
for /f "delims=" %%i in (2.txt) do set var=%%i&set str=%%i&call :lp
pause>nul&start ok.txt&goto :eof
:lp
set a=%str:~,1%
findstr "%a%" 1.txt>nul&&set flag=A
set str=%str:~1%
if defined str goto lp
if defined flag echo %var%>>ok.txt
set "flag="
[ Last edited by zw19750516 on 2008-6-20 at 02:20 PM ]



批处理之家新域名:www.bathome.net
2008-6-20 14:19
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
gucheng
新手上路





积分 6
发帖 2
注册 2007-2-7
状态 离线
『第 3 楼』:  

已经解决,谢谢

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





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

就楼主的例子 zw19750516兄的不能删689吧  补一个
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (2.txt) do (
   set str=%%a
   for /f "delims=" %%i in (1.txt) do (
   echo "%%i"|findstr "!str:~,1! !str:~1,1! !str:~2,1!">nul||set %%a=A
   )
   if not defined %%a echo %%a>>ok.txt
)
start ok.txt&goto :eof
[ Last edited by terse on 2008-6-20 at 03:46 PM ]



简单!简单!再简单!
2008-6-20 15:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by terse at 2008-6-20 15:31:
就楼主的例子 zw19750516兄的不能删689吧  补一个
[code]
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (2.txt) do (
   set str=%%a
   for /f " ...

还是请兄弟先测试下。。。
好久不见了,兄弟一向可好?



批处理之家新域名:www.bathome.net
2008-6-20 15:58
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
terse
银牌会员





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



  Quote:
Originally posted by zw19750516 at 2008-6-20 15:58:

还是请兄弟先测试下。。。
好久不见了,兄弟一向可好?

zw19750516兄好  测试后是这样的
我想你在前面处理的时候,假设1.txt的第一行不包含2.txt第一行的任意一个数字
而到后面含有的时候  到最后flag还是给定义了
1.txt内容:
12345
12356
01234
13456
12456
01456
2.txt内容:
123
134
156
012
013
789
689
321
ok.txt内容:
123
134
156
012
013
689
321




简单!简单!再简单!
2008-6-20 16:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by terse at 2008-6-20 16:11:

zw19750516兄好  测试后是这样的
我想你在前面处理的时候,假设1.txt的第一行不包含2.txt第一行的任意一个数字
而到后面含有的时候  到最后flag还是给 ...

不好意思,是我把题意理解错了,修改如下:
@echo off
for /f "delims=" %%i in (2.txt) do set var=%%i&set str=%%i&call :lp
pause>nul&start ok.txt&goto :eof
:lp
set a=%str:~,1%
findstr /v "%a%" 1.txt>nul&&set /a n+=1
set str=%str:~1%
if defined str goto lp
if "%n%" nqu "3" echo %var%>>ok.txt
set n=0
[ Last edited by zw19750516 on 2008-6-20 at 05:06 PM ]



批处理之家新域名:www.bathome.net
2008-6-20 17:04
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复

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


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



论坛跳转: