中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [请教]再请教一下,如何检查变量包含某些字符[已解决]
作者:
标题: [请教]再请教一下,如何检查变量包含某些字符[已解决] 上一主题 | 下一主题
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『楼 主』:  [请教]再请教一下,如何检查变量包含某些字符[已解决]

如题.比如我有个变量A,现在想检查A中是不是包含有BB.该如何写呢?自己试了好长时间都没成功

[ Last edited by yardian on 2006-10-19 at 10:02 ]

2006-10-19 07:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 2 楼』:  

echo %a%|findstr /i "bb" && echo 包含bb. || echo 不存在bb.

2006-10-19 07:54
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『第 3 楼』:  

回复的真快,谢谢!不过这个不好做跳转啊,我希望的是,如果包含BB则跳转到C处,不包含则跳转D去.可能因为我开始没把需求说清楚,真不好意思!

2006-10-19 08:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 4 楼』:  

汗...

echo %a%|findstr /i "bb" && goto :c || goto :d

2006-10-19 08:21
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 5 楼』:  

楼上好像多打了个:吧
echo %a%|findstr /i "bb" && goto c || goto d



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-19 08:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『第 6 楼』:  

查了一下命令手册:&&符号也是允许在一行中使用2个以上不同的命令,当第一个命令执行失败后后续的命令将不会再被执行

echo %a%|findstr /i "bb" && goto c || goto d
对于这个代码,我的理解是:如果找不到bb,直接跳到d;如果找到bb,然后跳到c,再跳到d.这里运行c就会问题.而且这个代码是多余的显示一行%a%.(而且实际测试也是这样的)

所以我觉得这个代码不够完美.感觉可能用errolevel实现可能好点.不知道理解的对不对,说错了,大侠不要生气啊

[ Last edited by yardian on 2006-10-19 at 09:10 ]

2006-10-19 08:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 7 楼』:  

1.  关于多打 ":", b :b 加不加冒号都代表标签"b"

2.  楼主觉得&&和||会出错, 尽管放心, 当找到"bb", &&代表执行成功跳转到:c, 反之, || 前面找不到"bb"执行错误跳转到:d.  绝对不会出现跳到c又跳到d的情况. 具体多试试就知道了.


来个原创, 不用find, findstr照样查找变量中是否存在特定字符串.
@echo off
:: 用来检测输入中是否含有"yes"字符串
:: 区分大小写!
set /p ii=请输入字符串:
setlocal enabledelayedexpansion
set form=0
set ii=%ii%@
:go
if not "%ii:~0,1%"=="@" (
    set /a num+=1
    if /i "!ii:~0,1!"=="y" set /a aa=!num!+1
    if "!num!"=="!aa!" if /i "!ii:~0,1!"=="e" set /a bb=!num!+1
    if "!num!"=="!bb!" if /i "!ii:~0,1!"=="s" set form=1
    set ii=%ii:~1%
    goto go
)
if "%form%"=="1" (
    echo 输入的字符串中包含"yes"
) else (
    echo 不包含"yes"字符串.
)
pause
更简单的代码:
@echo off
set /p ii=请输入字符串:
setlocal enabledelayedexpansion
set form=0
set ii=%ii%@
:go
if not "%ii:~0,1%"=="@" (
    if /i "!ii:~0,3!"=="yes" set form=1
    set ii=%ii:~1%
    goto go
)
cls
if "%form%"=="1" (
    echo yes
) else (
    echo no
)
pause
[ Last edited by pengfei on 2006-10-19 at 09:40 ]

2006-10-19 09:12
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『第 8 楼』:  

大侠太牛了啊.写的太复杂了,用起来还真不方便啊:(

[ Last edited by yardian on 2006-10-19 at 09:27 ]

2006-10-19 09:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『第 9 楼』:  

晕,为什么标题怎么会有乱码啊,而且改不过来

2006-10-19 09:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 10 楼』:  



  Quote:
[quote]Originally posted by yardian at 2006-10-19 09:22:
晕,为什么标题怎么会有乱码啊,而且改不过来

  因为标题超过了字数限制,把标题改短一点就可以了。

  Quote:
所以我觉得这个代码不够完美.感觉可能用errolevel实现可能好点.

其实这个&&和||已经够完美了,用errolevel来判断反倒不可靠——并非所有的命令都有返回值,也并非所有大于1的返回值都代表同一个意思。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-19 09:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『第 11 楼』:  

这个标题字数限制的也太少了吧

2006-10-19 10:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 12 楼』:  

if "%str% == ""%str:*abc=cba%" echo same!
代码很少,局限较大.

2006-10-20 08:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by yardian at 2006-10-19 08:57:
查了一下命令手册:&&符号也是允许在一行中使用2个以上不同的命令,当第一个命令执行失败后后续的命令将不会再被执行

echo %a%|findstr /i " ...

echo %a%|findstr /i "bb">nul && goto c || goto d
这样应该不会显示%A%了把



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-20 09:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: