中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 妖怪了!!这是BUG吧??!!
作者:
标题: 妖怪了!!这是BUG吧??!! 上一主题 | 下一主题
acoreq
初级用户

傻傻分不清楚...



积分 98
发帖 32
注册 2006-7-1
来自 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 ]

2006-8-13 13:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
acoreq
初级用户

傻傻分不清楚...



积分 98
发帖 32
注册 2006-7-1
来自 Shanghai
状态 离线
『第 2 楼』:  

又测试了多台机器的SCENARIO,一台装过PATCH,另外3台没有装
在装过PATCH的机器上RUN这个BATCH,结果success.log里显示本机机器名正确,但fail.log里一点东西都没有

似乎和第2)种可能无关,还是code问题吗?
不过我怎么看不出来问题的!!!  啊  疯掉了要。。。

2006-8-13 14:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
acoreq
初级用户

傻傻分不清楚...



积分 98
发帖 32
注册 2006-7-1
来自 Shanghai
状态 离线
『第 3 楼』:  UPDATE - 2

刚又发现,因为这个脚本是FOR MULTIPLE机器的
方法就是FOR /F %%i in (set) do (call ***.bat %%i)

发现set里的机器名顺序的不同  对于log文件的输出也有关系。。。
可变因素太多了  搞啊。。!!!

2006-8-13 14:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 4 楼』:  

那Patch NOT installed !有没有被输出呢?
如果有,那就是变量%strComputerName%的问题了。
否则就是reg那一句的问题了。

2006-8-13 14:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
acoreq
初级用户

傻傻分不清楚...



积分 98
发帖 32
注册 2006-7-1
来自 Shanghai
状态 离线
『第 5 楼』:  [源代码贴出]



  Quote:
Originally posted by acoreq at 2006-8-13 14:15:
刚又发现,因为这个脚本是FOR MULTIPLE机器的
方法就是FOR /F %%i in (set) do (call ***.bat %%i)

发现set里的机器名顺序的不同  对于log文件的输出也有关系。〠...

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 ]

2006-8-13 14:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chainliq
高级用户

学无尽止


积分 635
发帖 244
注册 2006-4-15
来自 广西贵港
状态 离线
『第 6 楼』:  

GOOD,不错,!~`1

2006-8-13 20:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (86682419)  编辑帖子  回复  引用回复
acoreq
初级用户

傻傻分不清楚...



积分 98
发帖 32
注册 2006-7-1
来自 Shanghai
状态 离线
『第 7 楼』:  

唉  别不错不错呀  帮忙解决问题啊  和和

2006-8-13 20:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 8 楼』:  

完整的源码没看到,不过对于

  Quote:
而且还发现,如果把IF那段改成下面那段(功能上应该一样的),注意这里用call了没用GOTO,怪事又来了
PATCH NOT INSTALLED!会显示2次,从而使p1 p2值产生错误,但是把call改成先前goto的结构  至少判断语句不会执行2次。。。 (没想法中。。。)

的情况,可以查看 《帮助与支持》

  Quote:
:label
指定批处理程序要跳转到的标签。使用带有该参数的 call 命令可以创建新的批处理文件上下文,并将控制权交给指定标签后的语句。当首次遇到该批处理文件的末尾时(在跳转到标签后),控制权将交还给 CALL 语句后的语句。第二次遇到批处理文件的末尾,批脚本将被退出。对于可允许您从批处理脚本返回的 goto :eof 命令扩展,要了解关于它的说明,请参阅“相关主题”。

-------摘自《帮助与支持》



2006-8-14 22:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: