标题:
[其他]
是批处理set命令的BUG吗?
[打印本页]
作者:
huajinghua
时间:
2008-4-5 19:56
标题:
是批处理set命令的BUG吗?
cmd输入
set a=1
set a=
if "%a%"=="" echo 空值
if not "%a%"=="" echo 被赋值
结果会发现显示的是“被赋值”,是BUG嘛?
作者:
梦想种子
时间:
2008-4-5 21:22
你应该清楚了的。麻烦你解释一下。
作者:
more
时间:
2008-4-19 21:32
set "a=1"
::下面一行用引号括起来就看到你的代码中有一个空格了
set "a= "
if "%a%"=="" echo 空值
if not "%a%"=="" echo 被赋值
作者:
heaton
时间:
2008-4-20 09:01
没有被赋值,就是不存在,就要用 if defined 语句
作者:
namejm
时间:
2008-4-27 09:32
实地测试了一番(把 set a= 后面的空格去掉之后测试的,楼主应该是多打了个空格),发现在CMD窗口中显示的确实是“被赋值”,但是,把最后一个echo改为 echo %a% ,结果显示的是 %a% 本身,并不是一个空值;把这个代码放到批处理文件中执行,显示的是 空值 。
从上面的测试结果来看,CMD窗口中执行命令的结果和批处理文件中执行的结果是不尽相同的,有时候甚至是截然相反的。之所以造成在CMD窗口中显示被赋值,而批处理中显示的是空值,推测成因是这样的:在CMD窗口中,当把某个变量设置为空值的时候,该变量将直接从内存中删除,所以, if "%a%"=="" 在执行的时候,比较的是 "%%" 字符串和 "" 字符串;而在批处理文件中,当变量为空时,该变量名将保留在内存中,而值被设置为空,所以,if "%a%"=="" 在执行的时候,比较的是 ""=="" 。至于更深层的原因,应该和不同环境对内存的存取操作有关,本人水平有限,期待后来之人的详尽分析。
欢迎光临 批处理之家 (http://bathome.net./)
Powered by Discuz! 7.2