无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 9163|回复: 19
打印 上一主题 下一主题

[已解决] 求一个VBS脚本:根据“系统版本号+32/64位系统”分别运行相应程序

[复制链接]
1#
发表于 2016-6-18 16:34:44 | 显示全部楼层
netmjwork 发表于 2016-6-17 13:54
谢谢!
这个是显示版本号的,但是怎么组合到一起实现我希望的效果呢?水平有限,不会“组合”……
帮忙 ...

汗,把  wscript.echo "windows visita"之类的改为你wscript.run 你的的程序。
我不记得你会写run的吗,你上次提问的脚本里面就有。

点评

多谢回复~ case "5.1.2600" wscript.echo "Windows XP" 改成: case "5.1.2600" wscript.run 程序 …… 但是这样只能实现:判断是什么系统,我来运行什么程序 我希望的效果是:判断是什么系统  详情 回复 发表于 2016-6-19 12:39
回复

使用道具 举报

2#
发表于 2016-6-19 14:35:50 | 显示全部楼层
本帖最后由 pogua007 于 2016-6-19 14:47 编辑
netmjwork 发表于 2016-6-19 12:39
多谢回复~

case "5.1.2600"


.SystemType,属性是判断系统是否64位的,我把3楼和6楼的脚本改一下
  1. strComputer = "."
  2.     Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
  3.     Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
  4.     For Each objItem in colItems
  5.       strOScaption=objitem.Caption
  6.       strOSversion=objitem.Version
  7.       strOSsystype=objitem.SystemType
  8.     Next
  9.     dim wsh
  10.     set wsh=wscript.createobject("wscript.shell")
  11.     If InStr( strOSsystype, "86") <> 0 Then
  12.        select case strOSversion
  13.        case "5.2.3790"
  14.            wscript.echo "Windows Server 2003" & "32位"
  15.        case "5.0.2195"
  16.            wscript.echo "Windows 2000" & "32位"
  17.        case "5.1.2600"
  18.             wscript.echo "Windows XP" & "32位"
  19.        case "6.0.6001"
  20.            wscript.echo "windows visita" & "32位"
  21.        case "6.1.7601"
  22.            wscript.echo "windows 7" & "32位"
  23.            wsh.run "Win7_32.exe"
  24.        case else
  25.            wscript.echo "未知的32位系统"
  26.        end select
  27.     elseif InStr(strOSsystype, "64") <> 0 Then
  28.        select case strOSversion
  29.        case "5.2.3790"
  30.            wscript.echo "Windows Server 2003" & "64位"
  31.        case "5.0.2195"
  32.            wscript.echo "Windows 2000" & "64位"
  33.        case "5.1.2600"
  34.             wscript.echo "Windows XP" & "64位"
  35.        case "6.0.6001"
  36.            wscript.echo "windows visita" & "64位"
  37.        case "6.1.7601"
  38.            wscript.echo "windows 7" & "64位"
  39.            wsh.run "Win7_64.exe"
  40.        case else
  41.            wscript.echo "未知的64位系统"
  42.        end select
  43.     else
  44.        wscript.echo "不知道32位还是64位的"
  45.     end if
复制代码

把select case写到Function(函数)里面代码更简洁,但是考虑你是新手,我想还是别出现更多的知识点了,代码累赘点就累赘点吧。

点评

您好,刚测试,无法运行,XP系统 7行报错: 对象不支持此属性或方法 'objitem.SystemType'  详情 回复 发表于 2016-6-20 11:11
确实刚开始接触,很多地方不太懂,只能从简易的来入手…… 方便的话给下“把select case写到Function(函数)里面”的代码,学习学习怎么来简化,多谢!  详情 回复 发表于 2016-6-19 18:15
回复

使用道具 举报

3#
发表于 2016-6-20 15:43:27 | 显示全部楼层
本帖最后由 pogua007 于 2016-6-21 20:22 编辑
netmjwork 发表于 2016-6-20 11:11
您好,刚测试,无法运行,XP系统

7行报错: 对象不支持此属性或方法 'objitem.SystemType'


我在整我的WES7+bblean,整的正happy,突然虚拟磁盘文件损坏,我把虚拟磁盘拆开,也没有恢复的了数据。
玩了两天游戏,才从数据损坏的打击中恢复。
  1. strComputer = "."
  2. dim wsh
  3. set wsh=wscript.createobject("wscript.shell")
  4. 'wscript.echo OSver(strComputer) & X86orX64(strComputer) & ".exe"
  5. wsh.run OSver(strComputer) & X86orX64(strComputer) & ".exe"

  6. Function X86orX64(strComputer)
  7.         Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
  8.         Set colItems = objWMIService.ExecQuery("Select * from Win32_ComputerSystem") ''尼玛是否64位和版本号不是一个查询,所以上次出错
  9.         For Each objItem in colItems
  10.                 strOSsystype=objitem.SystemType
  11.         Next
  12.         set objWMIService = nothing
  13.         set colItems = nothing
  14.         If InStr( strOSsystype, "86") <> 0 Then
  15.                 X86orX64="_x86"
  16.         elseif InStr(strOSsystype, "64") <> 0 Then
  17.                 X86orX64="_x64"
  18.         else
  19.                 wscript.echo "不知道32位还是64位的"
  20.                 wscript.quit
  21.         end if
  22. End Function

  23. Function OSver(strComputer)
  24.         Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
  25.         Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
  26.         For Each objItem in colItems
  27.                 strOScaption=objitem.Caption
  28.                 strOSversion=objitem.Version
  29.         Next
  30.         set objWMIService = nothing
  31.         set colItems = nothing
  32.         select case strOSversion
  33.                 case "5.2.3790"
  34.                         OSver = "2K3"
  35.                 case "5.0.2195"
  36.                         OSver =  "2K"
  37.                 case "5.1.2600"
  38.                         OSver = "XP"
  39.                 case "6.0.6001"
  40.                         OSver = "visita"
  41.                 case "6.1.7601"
  42.                         OSver = "W7"
  43.                 case else
  44.                         wscript.echo "未知的操作系统"
  45.                         wscript.quit
  46.         end select
  47. End Function
复制代码

点评

虚拟磁盘操作还得随时备份数据,raid这种都需要小心操作,都是不好恢复数据的…… 调整好心情~ 另,我这里没法运行,上半段运行报错: 类型不匹配 'OSver' ; 下半段儿单独放一个空的vbs运行没有任何提示……  详情 回复 发表于 2016-6-21 16:12
回复

使用道具 举报

4#
发表于 2016-6-21 17:54:13 | 显示全部楼层
本帖最后由 pogua007 于 2016-6-21 17:56 编辑
netmjwork 发表于 2016-6-21 16:12
虚拟磁盘操作还得随时备份数据,raid这种都需要小心操作,都是不好恢复数据的……
调整好心情~


汗!那是一整个的脚本,你给拆开,当然报错。
主程序就前面的5行,后面两个Function都是主程序的子过程。你把OSver过程删掉,当然出错,后面的Function没有主程序也当然没有反应。
这次的脚本我测试过的,'wscript.echo OSver(strComputer) & X86orX64(strComputer) & ".exe",就是我的测试语句,我都没有删掉,只是给注释了起来。

点评

刚发现一个问题:版本号能不能不那么精确的来判断?只判断前面大的数字即可 比如: case "5.1.2600" 就必须完全是这个值才行,如果是 case "5.1."就不行了 之前在dos里的批处理就是“ver|find  详情 回复 发表于 2016-6-21 19:07
这次明白了,新手容易闹笑话,呵呵…… 多谢!  详情 回复 发表于 2016-6-21 18:30
回复

使用道具 举报

5#
发表于 2016-6-21 20:27:44 | 显示全部楼层
netmjwork 发表于 2016-6-21 19:07
刚发现一个问题:版本号能不能不那么精确的来判断?只判断前面大的数字即可

比如:                 ...

运行程序啊, OSver(strComputer)传递参数strComputer给Function OSver,获得返回字符串系统版本,X86orX64(strComputer)传递参数传递参数strComputer给Function X86orX64获得返回字符串"_x86"或者"_x64"。
你把这句前面加单引号注释掉,然后把上面的那一句的单引号删除,测试一下看看,会显示一个字符串,在不同的系统中,这个字符串是不一样的,这就是要运行的程序了。
你要运行的程序以 “系统版本”+"_x86/x64"+".exe"这样的规则命名,就可以实现根据系统不同运行不同的程序了。如果程序不方便改名等,可以用以上述规则命名的快捷方式实现,把.exe改为.lnk。
这句只是个示例,具体的路径还需要处理的。
不比较小版本号,那要对字符串处理一下。把]Function OSver部分改成下面内容
  1. Function OSver(strComputer)
  2.         Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
  3.         Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
  4.         For Each objItem in colItems
  5.                 strOScaption=objitem.Caption
  6.                 strOSversion=objitem.Version
  7.         Next
  8.         set objWMIService = nothing
  9.         set colItems = nothing
  10.         strOSversion=left(strOSversion,InStrRev(strOSversion,".",-1,1) - 1) ''截取strOSversion为最后一个"."的左面部分
  11.         select case strOSversion
  12.                 case "5.2"
  13.                         OSver = "2K3"
  14.                 case "5.0"
  15.                         OSver =  "2K"
  16.                 case "5.1"
  17.                         OSver = "XP"
  18.                 case "6.0"
  19.                         OSver = "visita"
  20.                 case "6.1"
  21.                         OSver = "W7"
  22.                 case else
  23.                         wscript.echo "未知的操作系统"
  24.                         wscript.quit
  25.         end select
  26. End Function
复制代码

点评

非常感谢! 我再添加命令就可以用了,跟您学习不少~  详情 回复 发表于 2016-6-21 21:47
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-11-17 03:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表