![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 19:14 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 妖怪了!!这是BUG吧??!! |
| 可打印版本 1,129 / 7 |
| 第1楼 acoreq | 发表于 2006-08-13 13:46 |
| 初级用户 发帖 32 积分 98 来自 Shanghai | |
|
妖怪了!!这是BUG吧??!! 问题已经解决,谢谢:)
源代码在第5楼已贴出,请您认真阅读前几楼文章,有助于了解更多的问题现象 谢谢! 此贴怪异现象在XP/2003下测试得来 其实脚本很简单 就是判断注册表键值 IF EXIST success.log ( copy success.log #success.log del success.log ) IF EXIST fail.log ( copy fail.log #fail.log del fail.log ) cd. > success.log cd. > fail.log ... ... REG QUERY | FIND后加这个IF if errorlevel 1 ( echo Patch NOT installed ! echo %strComputerName% >> fail.log echo errlevel=%errorlevel% set /a p1=p1+1 ) else ( echo Patch installed :p echo %strComputerName% >> success.log echo errlevel=%errorlevel% set /a p2=p2+1 ) 妖怪问题来了!Lab里一台能找到键值,另一台找不到(脚本执行宿机),那应该fail.log和success.log里各有相应的计算机名。但是!。。。 fail.log里就是空空如也。。。success.log里却有正确的机器名 妖怪啊!!! 2个文件都存在,而且没有被打开 手工只打echo 1111>>fail.log却是OK的 试着把success.log改成fail.log,伊~ 新的fail.log能够被写入(说明ELSE以下code是好的) 把上面的fail.log改成success.log 还是不能正常写入进去(说明可能ELSE以上code有问题) 怀疑有2种可能 1) 上半部分code有问题(不过横看竖看都没问题啊。。。) 2) 和脚本执行的宿机有关,因为只有宿机不被纪录到 搞了好几个小时了 头大了 啊!!!!! 还望高手指点一二 [ Last edited by acoreq on 2006-8-13 at 20:54 ] |
|
| 第2楼 acoreq | 发表于 2006-08-13 14:10 |
| 初级用户 发帖 32 积分 98 来自 Shanghai | |
|
又测试了多台机器的SCENARIO,一台装过PATCH,另外3台没有装
在装过PATCH的机器上RUN这个BATCH,结果success.log里显示本机机器名正确,但fail.log里一点东西都没有 似乎和第2)种可能无关,还是code问题吗? 不过我怎么看不出来问题的!!! 啊 疯掉了要。。。 |
|
| 第3楼 acoreq | 发表于 2006-08-13 14:15 |
| 初级用户 发帖 32 积分 98 来自 Shanghai | |
|
UPDATE - 2 刚又发现,因为这个脚本是FOR MULTIPLE机器的
方法就是FOR /F %%i in (set) do (call ***.bat %%i) 发现set里的机器名顺序的不同 对于log文件的输出也有关系。。。 可变因素太多了 搞啊。。!!! |
|
| 第4楼 qzwqzw | 发表于 2006-08-13 14:26 |
| 银牌会员 发帖 636 积分 2,343 | |
|
那Patch NOT installed !有没有被输出呢?
如果有,那就是变量%strComputerName%的问题了。 否则就是reg那一句的问题了。 |
|
| 第5楼 acoreq | 发表于 2006-08-13 14:43 |
| 初级用户 发帖 32 积分 98 来自 Shanghai | |
[源代码贴出]Originally posted by acoreq at 2006-8-13 14:15: Patch NOT installed !有被输出 但不是%strComputerName%的问题,因为同样的变量在success.log里是输出的 也不是REG问题 因为REG判断后进入IF的ROUTE是正确的 刚又有一个重大发现!! 只有set里的最后一条纪录会被输出 不论它应该到fail.log还是success.log (发现越来越接近真相了,和和) 而且还发现,如果把IF那段改成下面那段(功能上应该一样的),注意这里用call了没用GOTO,怪事又来了 PATCH NOT INSTALLED!会显示2次,从而使p1 p2值产生错误,但是把call改成先前goto的结构 至少判断语句不会执行2次。。。 (没想法中。。。) 现决定贴出所有源代码,望斑竹或好心人帮忙研究一下! 谢谢!!!! if errorlevel 1 ( call :notpatched ) else ( call :patched ) :notpatched echo Patch NOT installed echo %strComputerName% >> fail.log set /a p1=p1+1 goto nextloop :patched echo Patch installed echo %strComputerName% >> success.log set /a p2=p2+1 goto nextloop :nextloop ::route to next PC validation [ Last edited by acoreq on 2006-8-13 at 20:54 ] |
|
| 第6楼 chainliq | 发表于 2006-08-13 20:00 |
| 高级用户 发帖 244 积分 635 来自 广西贵港 | |
|
GOOD,不错,!~`1
|
|
| 第7楼 acoreq | 发表于 2006-08-13 20:16 |
| 初级用户 发帖 32 积分 98 来自 Shanghai | |
|
唉 别不错不错呀 帮忙解决问题啊 和和
|
|
| 第8楼 3742668 | 发表于 2006-08-14 22:06 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
完整的源码没看到,不过对于
的情况,可以查看 《帮助与支持》
-------摘自《帮助与支持》 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |