相关文章推荐
侠义非凡的大象  ·  about_Special_Characte ...·  3 周前    · 
旅行中的包子  ·  FOR JSON ...·  11 小时前    · 
飘逸的登山鞋  ·  python 并发请求grpc ...·  3 周前    · 
发财的楼房  ·  Tomcat SSL 或 HTTPS ...·  1 年前    · 
气势凌人的眼镜  ·  CSS ...·  1 年前    · 
很多时候,我们需要检查某个变量的值是否为空,以便做后续处理。
对于这个问题,很多人会毫不犹豫地选择 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
很多时候,我们需要检查某个变量的值是否为空,以便做后续处理。  对于这个问题,很多人会毫不犹豫地选择 if "%str%"=="" …… 的句式,在早期的批处理中,还可以看到这样的语句:if [%str%]==[],有人把这两种写法称为“防空字符”。  可是,这样做真的能在各种复杂的情况下判断某个变量的值是否为空吗?  答案是否定的。  先来看 if [%str%]==[],当%s
在CMD使用IF /?打开IF的系统帮助会发现IF有3种基本的用法! 第一种用法:IF [NOT] ERRORLEVEL number command 这种用法现在很少用了,因为它需要使用到CHOICE命令,这个命令现在被set /p代替了,它是 判断 CHOICE命令选择的选项的,CHOICE命令是一个提供选项功能的命令。 这个用法的基本做用是 判断 上一条命令执行结果的代码,以决定...
判断 变量 的是否存在不等于 判断 其是否有值。 不能混淆。 变量 首先得存在, 即在系统中有定义, 然后确实存在后才能对其进行值得各种 判断 。  -如果存在但未赋值, 其初值可能为空 “”, 一般 判断 是否为空 的用法为:IF "%VAR%" == "" -如果不存在, 还去用此 变量 比较,则必然出错。 这两天在修改一个batch文件,出现了一个错误 self-transcendence: copy "%JAVA_HOME%\bin\java.exe" "%JAVA_HOME%\bin\omp.exe" omp -Xms64m -Xmx128m -cp ./lib/TINMSManager.jar;./lib/jconn3.jar;./lib/log4j-1.2.8.jar;./lib/xcodeapi.jar;./lib/dpp1.2.jar;./lib/foclientapt.jar;./lib/ojdbc14.jar;./lib/sgip.jar;./lib/sgip-client.jar com.metarnet.largeDataTaskFlowEngine.LargeDataTaskFlowMain -cfgFile conf\monitor\monitorTaskFlow.xml -cfgId default 您这块是什么意思呢? Wireshark 在Win7 安装完成后找不到网卡解决方法 tchmuzi: 哥,附件呢? Wireshark 在Win7 安装完成后找不到网卡解决方法 -宫商角徵-: Wireshark 在Win7 安装完成后找不到网卡解决方法 dmxai: 没看到附件呢