中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 11:59
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何获取wmic的返回值 查看 1,120 回复 7
楼 主 如何获取wmic的返回值 发表于 2010-03-28 14:17 ·  中国 上海 东方有线
初级用户
★★
积分 75
发帖 75
注册 2009-10-23 10:23
16年会员
UID 153553
性别 男
状态 离线
set aa=wmic computersystem where Name="%COMPUTERNAME%" call JoinDomainOrWorkgroup Name="sohu.com" username="temp" password="temp" fjoinoptions=1 accountou=null

if %aa% == 0 (
echo 成功
goto :Next
)

这样子不行,高手来指点一下吧
2 发表于 2010-03-28 14:35 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
1,执行一个命令,然后读其输出中受否含有关键词来判断。
2,执行一个命令,然后从%ERRORLEVEL%的返回代码来判断。
3,执行一个命令,然后检查被修改对象是否发生正确的变化来判断。

对于你提供的事例,这三种方法都可以使用(你的批处理本身就写错了)。
例如,从wmic或注册表读相应的值,来判断是否为希望修改的值。由于wmic的返回代码比较复杂,所以一般不使用%ERRORLEVEL%来判断wmic是否正常执行。

[ Last edited by Hanyeguxing on 2010-3-28 at 14:52 ]
3 发表于 2010-03-28 14:46 ·  中国 上海 东方有线
初级用户
★★
积分 75
发帖 75
注册 2009-10-23 10:23
16年会员
UID 153553
性别 男
状态 离线
%ERRORLEVEL%不行,wmic不管什么参数都是返回成功,只有ReturnValue = 0;时才是对的,


是不是要用for循环读取外部文件来判断呀,不太会,帮人到底给写一下行吗
4 发表于 2010-03-28 14:54 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
Originally posted by czweb at 2010-3-28 14:46:
%ERRORLEVEL%不行,wmic不管什么参数都是返回成功,只有ReturnValue = 0;时才是对的,


是不是要用for循环读取外部文件来判断呀,不太会,帮人到底给写一下行吗

当wmic的返回信息中包含“错误”时,就会有%ERRORLEVEL%。
但如“无可用范例”等,是不会返回0以外的代码的。
WMIC可以get你尝试修改过的值,reg读取对应的注册表,都可以用啊

例如wmic computersystem where "name='abc'" call rename 123更改计算机名abc为123
这个时候就可以读%COMPUTERNAME%是否为123来判断。

[ Last edited by Hanyeguxing on 2010-3-28 at 15:00 ]
5 发表于 2010-03-28 15:00 ·  中国 上海 东方有线
初级用户
★★
积分 75
发帖 75
注册 2009-10-23 10:23
16年会员
UID 153553
性别 男
状态 离线
因为我写一个错误的域、用户名和密码,也是返回成功,

C:\Documents and Settings\cz>wmic computersystem where Name="%COMPUTERNAME%" cal
l JoinDomainOrWorkgroup Name="ss" username="aa" password="aa" fjoinoptions=1 acc
ountou=null
执行 (\\XC1\ROOT\CIMV2:Win32_ComputerSystem.Name="XC1")->JoinDomainOrWorkgroup()

方法执行成功
输出参数:
instance of __PARAMETERS
{
ReturnValue = 2691;
};



所以只有判断ReturnValue才是有效的

[ Last edited by czweb on 2010-3-28 at 15:02 ]
6 发表于 2010-03-28 15:02 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
那就读ReturnValue是否为你需要的值来判断呗
7 发表于 2010-03-28 15:03 ·  中国 上海 东方有线
初级用户
★★
积分 75
发帖 75
注册 2009-10-23 10:23
16年会员
UID 153553
性别 男
状态 离线
可惜不会写,能帮忙吗
8 发表于 2010-04-01 09:10 ·  中国 辽宁 大连 辽宁神州云信息技术有限公司电信数据中心
初级用户
积分 27
发帖 12
注册 2008-04-26 03:58
18年会员
UID 116974
性别 男
状态 离线
Originally posted by czweb at 2010-3-28 02:46 PM:
%ERRORLEVEL%不行,wmic不管什么参数都是返回成功,只有ReturnValue = 0;时才是对的,


错!!!

【1】%ERRORLEVEL%不是不行;
【2】ReturnValue = 0不一定是对的。
论坛跳转: