中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-08 15:39
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » 批处理版万年历
可打印版本  16,648 / 44
第31楼 kidzgy 发表于 2007-08-02 07:19
中级用户 发帖 129 积分 262
我可是在20楼 点击 [Copy to clipboard] 复制到文本里去,然后改扩展名。

怎么会没有问题呢?你试着重新复制你自己的代码到bat中去,然后运行,输入里面所举的例子,会提示错误的。此时错误的界面一直是个循环,不管你按任意键,还是一样。
第32楼 qzwqzw 发表于 2007-08-02 07:55
银牌会员 发帖 636 积分 2,343
应该是你的情况比较特殊一些
我和早前的namejm讨论都没有遇到这个问题
这次为了测试特意使用IE打开了这个页面
试了 [Copy to clipboard] 功能
也没有任何问题

所以请还是按照的建议插入调试语句看看结果再说
第33楼 frankkf 发表于 2007-08-02 13:31
初级用户 发帖 43 积分 88
功能应该没问题
以前一些code我也用的是 功能

这次为了测试特意使用IE打开了这个页面

那qzwqzw用什么看网页?
firefox或者是opera?~~
第34楼 kidzgy 发表于 2007-08-02 16:47
中级用户 发帖 129 积分 262
http://upload.programfan.com/upfile/200708021645310.rar
你试试我这个,看看是不是有这个问题,我可是完全复制下来的哦。

随便打一个字,然后回车。提示“错误的日期.” 然后不管你按什么键是不会回到原来的界面的。
第35楼 qzwqzw 发表于 2007-08-03 07:03
银牌会员 发帖 636 积分 2,343
非常感谢你的报告!
因此我又揭开了微软cmd的一个secret

解决你的问题方法很简单
请将你的代码文件扩展名改为.cmd
或者在代码中的set /a前加上一句 cd. 以复位错误号为0

==================================

现在描述一下解决问题的过程
首先下载到你的测试文件后
测试运行果然发现你所述的问题

然后我对问题代码与我的正常运行的源代码进行比较
发现问题代码分别在第2行和第一个goto Main所在行行尾多出两个空格
因为第2个空格位置的特殊性
我以为找到了问题所在

因为我使用的是EditPlus编辑源代码
它保存代码时会自动清除行尾的空格
而帖出去的代码很可能是因为使用了其它编辑器修改后多出来的

然而我在去除掉多余空格测试却发现问题依然存在
再次二进制比较两个代码文件的结果是完全一致

然后我开始漫长的跟踪调试
我发现问题代码总是在因为一次set /a的错误产生错误号9167后
不会再因为正确的set /a而复位错误号0
而正常代码就无此问题

经过再三的思索
终于确定这个问题与文件扩展名相关
也就是说,
在.bat文件中set 产生的错误总不会被set所复位
而在.cmd文件中则是可以的

以下是一段测试代码
将它分别保存为.bat和.cmd文件进行测试后发现
二者结果不同
至此问题基本明晰



但是至于这个问题的深层原因尚没有找到
这个留待有心人继续探索
而且我在EditPlus的工具栏中运行.bat文件并没有遇到此问题
第36楼 kidzgy 发表于 2007-08-03 20:04
中级用户 发帖 129 积分 262
那请你更新一下20楼的代码,以至于更完善一点。
不管在bat还是cmd中,能够保证正常运行就够了。
第37楼 kidzgy 发表于 2007-08-04 18:05
中级用户 发帖 129 积分 262
还是有错误,还是保存到BAT的时候,输入07-02-03提示错误。

我是复制20楼的代码到BAT中和CMD中分别测试的。
第38楼 qzwqzw 发表于 2007-08-04 19:02
银牌会员 发帖 636 积分 2,343
问题已经查明
仍然是set的errorlevel问题

至于问题的细节
和代码的修改
就留给你当今晚的作业吧

也算考一考你对这个问题的认识
第39楼 kidzgy 发表于 2007-08-04 19:14
中级用户 发帖 129 积分 262
不会吧,我对批处理不是很熟悉啊,不像你们那么懂得资深。

如果叫我测试那还行,如果叫我修复问题,那简直是为难我。。
第40楼 zjl5 发表于 2007-08-04 23:20
初级用户 发帖 15 积分 82
qzwqzw兄可能太忙了...
我就针对症状改改吧.可能会引出更多的问题呵~`
另外加入了 针对农历的生肖和干支年计算.

第41楼 zjl5 发表于 2007-08-05 01:21
初级用户 发帖 15 积分 82
奇怪%errorlevel%怎么会是9167,兄台解释一下,谢谢!!
因为没有编辑贴子的权限,所以又得另发一张了.

第42楼 qzwqzw 发表于 2007-08-05 18:47
银牌会员 发帖 636 积分 2,343
9167是set /a因为无效数字(比如09)错误产生的errorlevel
需要注意的是set /p如果未获取到任何输入也会产生1的errorlevel
而且即使set /a和set /p再正常运行也不会复位早前的errorlevel

也就是说,在命令行或者.bat脚本中
set命令只有在运行出错时才会置errorlevel为非0值
在正确运行时是不会置0值的

而在.cmd脚本中
set在正确运行时是会置errorlevel为0值的
第43楼 sunny04551 发表于 2007-08-20 15:30
贫困用户 发帖 5 积分 -4
要是能查到农历就更好
第44楼 meicnk 发表于 2007-08-27 11:16
初级用户 发帖 11 积分 22
很好,收藏中
第45楼 hmilywenjia 发表于 2008-05-26 14:14
新手上路 发帖 5 积分 8
今天上来看到namejm的消息很是高兴啊,一直关注你的消息,你没事就好
上一页  1 2 3
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023