标题: [其他] [已解决]请教1个不理解的批处理if命令 [打印本页]
作者: czjt1234 时间: 2010-5-3 11:09 标题: [已解决]请教1个不理解的批处理if命令
if !d:~0^,1!==0
if !d:~0,1!==0这样的我理解,加了^是什么意思
另外
set p=%a%
set "p=%a%" 这个引号的作用是否就仅仅是防空格
[ 本帖最后由 czjt1234 于 2010-5-3 20:00 编辑 ]
作者: hanyeguxing 时间: 2010-5-3 11:59
对于一般的字符比较,推荐使用==,而不推荐使用运算符如equ或neq
在使用==时,推荐比较的两个字符串都被括起来.
在不括起来的时候:if %a:~0,1%==1 echo.为1
在预处理时%a:~0,1%直接被替换成其值,然后执行if 比较,例如a为5,则实际执行的就是 if 5==1 echo.为1
而if !a:~0,1!==1 echo.为1在预处理时!a::~0,1!并不替换,这就导致预处理之后执行if !a:~0,1!==1 echo.为1
命令解释器会将这个逗号,当成分隔符,从而造成语法错误,这个时候使用^使预处理时失去分隔作用。
通过下面这个批处理示例,可以说明不延迟的变量与延迟的变量,在预处理时发生了什么变化。- @setlocal enabledelayedexpansion
- @set a=5
- echo.不延迟%a%
- echo.延迟的!a!
- @pause
复制代码
类似的还有echo.!a:~0^,1!等
相关资料论坛内搜索“预处理”和“变量延迟”
原帖由 czjt1234 于 2010-5-3 11:09 发表
另外
set p=%a%
set "p=%a%" 这个引号的作用是否就仅仅是防空格
是预防%a%中存在&或|等敏感字符的。例如:- @echo off
- set "a=1&2"
- set b=%a%
- set
- pause
复制代码
至于空格,=后是允许有的,可以不用引号括起来。所以,下面示例的写法是错误的复制代码
这个命令对a赋的值不是1,而是“1 ”,即将1连同后面的空格同时赋值了。
[ 本帖最后由 hanyeguxing 于 2010-5-3 12:57 编辑 ]
作者: Batcher 时间: 2010-5-3 13:04 标题: 回复 2楼 的帖子
==和equ相比,有哪些好处?
作者: hanyeguxing 时间: 2010-5-3 13:17
例如字符比较05和5- ,@,echo off
- ,if,05==5,(echo,yes1)else,echo,no1
- ,for,/l,%%a,in,(1,1,3),do,echo,
- ,if,"05",equ,"5",(echo,yes2)else,echo,no2
- ,pause
复制代码
==可以比equ少占7个字符的位置呢,哈哈
[ 本帖最后由 hanyeguxing 于 2010-5-3 13:44 编辑 ]
作者: gudou 时间: 2010-5-4 13:47
跟着学习了,原来一直纳闷为什么有的变量用%a%,有时却用!a!……现在有点明白了。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |