[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
对于一般的字符比较,推荐使用==,而不推荐使用运算符如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
命令解释器会将这个逗号,当成分隔符,从而造成语法错误,这个时候使用^使预处理时失去分隔作用。
通过下面这个批处理示例,可以说明不延迟的变量与延迟的变量,在预处理时发生了什么变化。
  1. @setlocal enabledelayedexpansion
  2. @set a=5
  3. echo.不延迟%a%
  4. echo.延迟的!a!
  5. @pause
复制代码
类似的还有echo.!a:~0^,1!等
相关资料论坛内搜索“预处理”和“变量延迟”
原帖由 czjt1234 于 2010-5-3 11:09 发表
另外
set p=%a%

set "p=%a%" 这个引号的作用是否就仅仅是防空格

是预防%a%中存在&或|等敏感字符的。例如:
  1. @echo off
  2. set "a=1&2"
  3. set b=%a%
  4. set
  5. pause
复制代码
至于空格,=后是允许有的,可以不用引号括起来。所以,下面示例的写法是错误的
  1. set a=1 & set b=0
复制代码
这个命令对a赋的值不是1,而是“1 ”,即将1连同后面的空格同时赋值了。

[ 本帖最后由 hanyeguxing 于 2010-5-3 12:57 编辑 ]
1

评分人数

寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

例如字符比较05和5
  1. ,@,echo off
  2. ,if,05==5,(echo,yes1)else,echo,no1
  3. ,for,/l,%%a,in,(1,1,3),do,echo,
  4. ,if,"05",equ,"5",(echo,yes2)else,echo,no2
  5. ,pause
复制代码
==可以比equ少占7个字符的位置呢,哈哈

[ 本帖最后由 hanyeguxing 于 2010-5-3 13:44 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表