注册
登录
论坛
搜索
帮助
导航
私人消息 (0)
公共消息 (0)
论坛任务 (0)
系统消息 (0)
好友消息 (0)
帖子消息 (0)
批处理之家
»
BAT求助&讨论
» 是批处理set命令的BUG吗?
[新手上路]
批处理新手入门导读
[视频教程]
批处理基础视频教程
[视频教程]
VBS基础视频教程
[批处理精品]
批处理版照片整理器
[批处理精品]
纯批处理备份&还原驱动
[批处理精品]
CMD命令50条不能说的秘密
[在线下载]
第三方命令行工具
[在线帮助]
VBScript / JScript 在线参考
返回列表
发帖
namejm
发短消息
加为好友
namejm
(闭关中)
当前离线
批处理代码写手
UID
5
帖子
1348
精华
8
积分
5183
PB
4236
技术
142
捐助
501
阅读权限
254
来自
四川-成都
在线时间
1842 小时
注册时间
2007-10-25
最后登录
2013-6-19
荣誉版主
帖子
1348
积分
5183
技术
142
捐助
501
注册时间
2007-10-25
1
楼
跳转到
»
发表于 2008-4-27 09:32
|
显示全部帖子
实地测试了一番(把 set a= 后面的空格去掉之后测试的,楼主应该是多打了个空格),发现在CMD窗口中显示的确实是“被赋值”,但是,把最后一个echo改为 echo %a% ,结果显示的是 %a% 本身,并不是一个空值;把这个代码放到批处理文件中执行,显示的是 空值 。
从上面的测试结果来看,CMD窗口中执行命令的结果和批处理文件中执行的结果是不尽相同的,有时候甚至是截然相反的。之所以造成在CMD窗口中显示被赋值,而批处理中显示的是空值,推测成因是这样的:在CMD窗口中,当把某个变量设置为空值的时候,该变量将直接从内存中删除,所以, if "%a%"=="" 在执行的时候,比较的是 "%%" 字符串和 "" 字符串;而在批处理文件中,当变量为空时,该变量名将保留在内存中,而值被设置为空,所以,if "%a%"=="" 在执行的时候,比较的是 ""=="" 。至于更深层的原因,应该和不同环境对内存的存取操作有关,本人水平有限,期待后来之人的详尽分析。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。
心在天山,身老沧州。
TOP
返回列表
批处理专区: BAT CMD DOS
BAT求助&讨论
BAT教程&资料
BAT原创&转载
BAT新大陆
BAT转载代码
新手练功
出题挑战
有偿求助
第三方命令行
开源原创工具
iBAT
Take Command
其他脚本区
PowerShell求助&讨论
PowerShell教程&资料
PowerShell原创&转载
VBS求助&讨论
JS / JScript / JavaScript
VBS教程&资料
VBS原创&转载
UNIX/Linux Shell
Python
Perl
网络资源区
电脑技术研讨
精品软件交流
论坛事务区
站务交流
意见反馈
论坛公告
版主申请
交换链接
建站杂谈
活动专区
论坛总版规
[收藏此主题]
[关注此主题的新回复]
[通过 QQ、MSN 分享给朋友]