[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] [已解决]请教1个不理解的批处理if命令

if !d:~0^,1!==0

if !d:~0,1!==0这样的我理解,加了^是什么意思


另外
set p=%a%

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

[ 本帖最后由 czjt1234 于 2010-5-3 20:00 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

对于一般的字符比较,推荐使用==,而不推荐使用运算符如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

回复 2楼 的帖子

==和equ相比,有哪些好处?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

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

跟着学习了,原来一直纳闷为什么有的变量用%a%,有时却用!a!……现在有点明白了。

TOP

返回列表