博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
批处理判断变量值是否为空的终极方法
阅读量:6389 次
发布时间:2019-06-23

本文共 1023 字,大约阅读时间需要 3 分钟。

hot3.png

批处理判断变量值是否为空的终极方法

很多时候,我们需要检查某个变量的值是否为空,以便做后续处理。

对于这个问题,很多人会毫不犹豫地选择 if "%str%"=="" …… 的句式,在早期的批处理中,还可以看到这样的语句:if [%str%]==[],有人把这两种写法称为“防空字符”。
可是,这样做真的能在各种复杂的情况下判断某个变量的值是否为空吗?
答案是否定的。
先来看 if [%str%]==[],当%str%为空值的时候,它无疑能成功地捕获到这一情况,但是,如果%str%中含有特殊字符,比如>、&之类,这条语句就会报错。
为了兼容这几个特殊字符,人们绞尽脑汁,想到了 if "%str%"=="" 语句,于是,>、&、|之类的特殊字符也能顺利通过验证了,这是防空字符的一大进步。
但是,这条语句也不是完美的,因为有一个特殊字符它完全没办法处理!
这个特殊字符是什么呢?
它就是双引号"本身!
我们执行一下如下代码:

  1. @echo off
  2. set str="
  3. if "%str%"=="" (echo yes) else echo no
  4. pause

CMD.EXE报错了:命令语法错误。

原来,上面这条if语句执行的是 if """=="" ……,引号起到分组字符串的作用,而引号对是就近匹配的:第一个引号和第二个引号配成一对,第三个引号和第四个引号配成一对,第五个引号和第六个引号配成一对……,这条if语句最终的执行的是 if "==……,但是引号始终要作为分组字符来使用的,而单个的引号没有找到下一个可匹配的引号,所以就出现了语法错误。
当把 %str% 的值改为两个引号的时候,上面这段代码的执行结果居然显示为no,想想这是为什么。
if "%str%"==""……能兼容大部分特殊字符,但是偏偏不能兼容引号本身,那么,判断某个变量的值是否为空,是不是就没有更好的办法了呢?
答案是肯定的,那就是:用 if defined str 语句来判断变量值是否为空。
请执行以下代码:

  1. @echo off
  2. :Main
  3. cls
  4. set str=
  5. set /p "str=请输入任意字符,或直接回车:"
  6. if defined str (
  7.     echo 变量 str 的值不为空
  8. ) else echo 变量 str 为空值
  9. pause
  10. goto Main

 

转载于:https://my.oschina.net/jacobin/blog/171379

你可能感兴趣的文章
我的友情链接
查看>>
Martini 中的 Handler
查看>>
一本跳进挨踢生活圈的日记(南京站)
查看>>
HttpWatch工具简介及使用技巧
查看>>
我的友情链接
查看>>
Objective-C中new与alloc/init的区别
查看>>
手动编译Mysql5.6.10 手动编译php 支持fastcgi
查看>>
MySQL主主
查看>>
linux的权限管理以及特殊权限SUID,SGID,Sticky
查看>>
大数据测试之初识Hadoop2
查看>>
linux安装nginx
查看>>
超棒的jQuery矢量地图生成插件 - JQVAMP
查看>>
【简报】超棒的拖放式文件上传javascript类库:FileDrop
查看>>
c语言题中的一些陷阱
查看>>
Python 装饰器
查看>>
PHP 自定义session储存 数据库 方式类 高洛峰 细说PHP
查看>>
nginx域名配置非80端口的301跳转
查看>>
我的友情链接
查看>>
iota和<<左移>>右移的用法
查看>>
ConcurrentHashMap总结
查看>>