标题: 妖怪了!!这是BUG吧??!!
[打印本页]
作者: acoreq
时间: 2006-8-13 13:46
标题: 妖怪了!!这是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 ]
作者: acoreq
时间: 2006-8-13 14:10
又测试了多台机器的SCENARIO,一台装过PATCH,另外3台没有装
在装过PATCH的机器上RUN这个BATCH,结果success.log里显示本机机器名正确,但fail.log里一点东西都没有
似乎和第2)种可能无关,还是code问题吗?
不过我怎么看不出来问题的!!! 啊 疯掉了要。。。
作者: acoreq
时间: 2006-8-13 14:15
标题: UPDATE - 2
刚又发现,因为这个脚本是FOR MULTIPLE机器的
方法就是FOR /F %%i in (set) do (call ***.bat %%i)
发现set里的机器名顺序的不同 对于log文件的输出也有关系。。。
可变因素太多了 搞啊。。!!!
作者: qzwqzw
时间: 2006-8-13 14:26
那Patch NOT installed !有没有被输出呢?
如果有,那就是变量%strComputerName%的问题了。
否则就是reg那一句的问题了。
作者: acoreq
时间: 2006-8-13 14:43
标题: [源代码贴出]
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 ]
作者: chainliq
时间: 2006-8-13 20:00
GOOD,不错,!~`1
作者: acoreq
时间: 2006-8-13 20:16
唉 别不错不错呀 帮忙解决问题啊 和和
作者: 3742668
时间: 2006-8-14 22:06
完整的源码没看到,不过对于
Quote: |
而且还发现,如果把IF那段改成下面那段(功能上应该一样的),注意这里用call了没用GOTO,怪事又来了
PATCH NOT INSTALLED!会显示2次,从而使p1 p2值产生错误,但是把call改成先前goto的结构 至少判断语句不会执行2次。。。 (没想法中。。。) |
|
的情况,可以查看 《帮助与支持》
Quote: |
:label
指定批处理程序要跳转到的标签。使用带有该参数的 call 命令可以创建新的批处理文件上下文,并将控制权交给指定标签后的语句。当首次遇到该批处理文件的末尾时(在跳转到标签后),控制权将交还给 CALL 语句后的语句。第二次遇到批处理文件的末尾,批脚本将被退出。对于可允许您从批处理脚本返回的 goto :eof 命令扩展,要了解关于它的说明,请参阅“相关主题”。 |
|
-------摘自《帮助与支持》