中国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
状态 离线
『楼 主』:  授人鱼不如授人渔,请教关于!的用法

[code@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[/code]

这是坛子 里的一位老大给我的代码,可是不会渔,所以一直不会改为已用.哪位大侠能解释一下,最好能详细解释一下形如:!num!,!ii:~0,1!.
!是怎么用的?这个%ii:~0,1%,可以从set /?里找到.但!ii:~0,1!这里换成!意思一样吗?

[ Last edited by yardian on 2006-10-21 at 00:16 ]

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




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

没人指教?

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




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

你看这一段更容易懂.
@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


2006-10-21 05:11
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 4 楼』:  

还有一个笨的方法:)
用你适先定义好的要被查找的字符串,
用它们替换掉用户输入的内容中相同的字符串,
把它们替换为一个用户不太容易或不太可能出现的一个标置字符,
用这个字符(被替换成了首位)来比较我们适先定义的一个符号(如“氵”),
如果有这个符号,说明成功替换了,说明用户输入的内容含有YES,
如果没有这个符号,说明没有成功替换,所以就是不包含。
……
@echo %dbg% off && setlocal enabledelayedexpansion
set /p ii=请输入字符串:
set  ii=%ii:*yes=氵%  &&  set  ii=%ii:~0,1%
if /i "!ii!"=="氵" (echo 发现yes字符!) else (echo 没有发现yes字符.)
[ Last edited by redtek on 2006-10-21 at 08:00 ]



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-10-21 07:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by yardian at 2006-10-20 22:38:
:!num!,!ii:~0,1!.
!是怎么用的?这个%ii:~0,1%,可以从set /?里找到.但!ii:~0,1!这里换成!意思一样吗?

%ii:~0,1% (含义:取%ii%变量的第一个字符,从偏移量0开始)
      (它的具体含义要查询  for  /?  ,这个FOR的帮助很全)
      (这个有很多种用法,非常多,一堆话也说不完,需要照着帮助来一个一个运行一下来理解)

其它的内容请查询以下等帮助信息:

SET   /?

FOR   /?     

SETLOCAL   /?

IF  /?

其中 FOR 中有针对!这个符号的使用的详细说明,但还需要反复理解和运行试验:)
否则无法理解透:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-10-21 07:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yardian
中级用户




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



  Quote:
Originally posted by pengfei at 2006-10-21 05:11 AM:
你看这一段更容易懂.

[code]
@echo off
set /p ii=请输入字符串:
setlocal enabledelayedexpansion
set form=0
set ii=%ii%@
:go
if not "%ii:~0,1%"=="@" (
     ...

看这个感觉!=%,.但为什么要用!而不用%呢?

2006-10-21 11:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 7 楼』:  

setlocal /? 看的更清楚

2006-10-21 22:44
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by yardian at 2006-10-21 11:09:



看这个感觉!=%,.但为什么要用!而不用%呢?

这个!和%如果用几句话来概括,还是不能把它们的精华说尽。

!与%无法直观的认定它们的区别和应该在什么时候使用,
不全是因为它们的帮助没有写清楚,
最主要的问题是:

    如果  SET  的各种变量复杂赋值,在赋值中还要传递值。
    而且如果遇到了要在 for 的循环中给变量赋值,所赋的值又是变量……
    大量的变量在 FOR 中和在 For 外部应用,相互赋值、传值……
    还有大量的字母或变量分隔操作,在for中或在for外面操作等等
    还有关于  SET /A 和  SET  A=B 的类似赋值的区别等等……
    
等等一系列操作,如果平时使用时只编过几个批处理或者应用的非常少,
那么!与%的问题很可能不常遇到,或者遇到了!与%的问题不知道如何而解,
最主要的原因在于:

    上面的一系列内容的知识点都是相连着的,如果学习DOS过快,很可能丢掉了或没有学透就开始编更高级的内容所致。

    跳跃性学习和学习速度过快,而为了争取时间有时候我们常会忽略最基本的内容,如SET FOR等等,
    就导致了越向后学习与应用,所需要的基本知识点要求越要精通:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-10-21 23:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yeesong2002
新手上路




积分 8
发帖 6
注册 2006-10-21
状态 离线
『第 9 楼』:  

支持一下了!!!!!!!!!

2006-10-21 23:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sglxy
中级用户

MS-DOS爱好者


积分 397
发帖 87
注册 2002-12-15
状态 离线
『第 10 楼』:  

支持

2006-10-22 19:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zoub
初级用户





积分 20
发帖 6
注册 2006-10-1
状态 离线
『第 11 楼』:  

认真看看。。。

2006-10-24 23:25
查看资料  发送邮件  发短消息 网志  OICQ (327291883)  编辑帖子  回复  引用回复

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


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



论坛跳转: