中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何判断操作系统类别导入相应的注册表
作者:
标题: [已结]如何判断操作系统类别导入相应的注册表 上一主题 | 下一主题
suiyuanye
中级用户




积分 289
发帖 94
注册 2006-6-6
状态 离线
『楼 主』:  [已结]如何判断操作系统类别导入相应的注册表

判断操作系统类别的批处理,如下

ver >> c:\a.txt
for /f "tokens=3 delims= " %%I in (c:\a.txt) do set %%I=a
if %a%==98 do command1
if %a%==me do command1
if %a%==2000 do command2
if %a%==xp do command2
if %a%==2003 do command2
################################

for /f "tokens=3 delims= " %%I in (c:\a.txt)

请问上面那个命令是如何在a.txt文件中取值的?因为我发现在98和XP下运行ver后输出内容的格式不统一,分别如下,会不会影响执行过程?

Windows 98 [Version 4.10.2222]

Microsoft Windows XP [版本 5.1.2600]

[ Last edited by willsort on 2006-6-14 at 17:12 ]

   此帖被 -8 点积分      点击查看详情   


2006-6-8 10:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 2 楼』:  

我想楼主的代码中存在一些问题,例如do set %%I=a应该为set a=%%i,其实楼主没有必要这么麻烦把set a=%%i去掉,用%%i来判断也是可行的,如果楼主是用VER的返回信息作为判断标准,那么楼主判断是有一定难度的,
Windows 98 [Version4.10.2222]

Microsoft Windows XP [版本 5.1.2600]  按照楼主的语句%%i的值根本就判断不出来,取的部分也是不一样的,而且IF语句可以写到一行以精简语句,所以楼主的代码存在很多问题

2006-6-8 10:35
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 3 楼』:  


───────────────── 版主提示 ─────────────────
为了便于论坛用户浏览和版主管理,请您修改本主题的标题,以简要叙述主题的内容或意图
如果您确认标题不需要修改,请继续回复该主题进行申辩,若申辩理由充分,将取消该通知
如果您确认标题需要修改,请点击该主题首帖下方"编辑"按钮,在编辑页面中修改标题栏
如果此通知发出三日后您仍未进行申诉或修改,将由版主进行修改,并对作者进行相应处罚
处罚为扣除8点积分,包括追回您因发表主题奖励的6分和因标题违规而惩罚性扣除的2分
在得知您做出积极恰当的回应后,版主将在三个工作日内删除本提示以消除对您的不利影响
───────────────── 版主提示 ─────────────────



Re suiyuanye:

      确实,你的代码存在一些比较重要的缺陷。

      因为在98/Me的命令行中不提供 for/f 等许多命令扩展特性的支持,所以程序兼容的立足点无法得到保障。

      判断系统版本最简单的方法是
      ver | find "[系统版本1]" >nul
      if not errorlevel 1 goto [系统版本1处理代码]
      ver | find "[系统版本2]" >nul
      if not errorlevel 1 goto [系统版本1处理代码]
      ......

      但如果用于批处理代码中是否使用扩展特性的选择,则更常用的方法是
      if "%OS%"=="Windows_NT" ...

      因为绝大部分支持%OS%变量的命令行环境都支持命令扩展特性,但也有一些例外,比如关闭命令扩展的CMD/y命令行。如果需要考虑这个特殊的命令行环境,可以使用如下语句判别命令行环境。
      if "%CmdExtVersion%"=="2" ...


[ Last edited by willsort on 2006-6-8 at 11:22 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-8 11:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
suiyuanye
中级用户




积分 289
发帖 94
注册 2006-6-6
状态 离线
『第 4 楼』:  

微软网站找到的

如何确定登录脚本中的 OS 类型
察看本文应用于的产品
文章编号 : 190899
最后修改 : 2004年12月15日
修订 : 3.1
概要
管理员往往喜欢仅在 Windows 95 或 Windows 98 客户端上或者仅在 Windows NT Workstation 客户端上运行软件。他们可能不想在 Windows NT Server 计算机上或域控制器上运行某些登录脚本命令。
更多信息
使用一个简单的批处理文件和一个很小的可执行文件,您就可以判断出客户端是下面的哪一种客户端: • Windows 95 或 Windows 98 客户端
• Windows NT Workstation
• Windows 2000 Professional 安装
• Windows NT Server 非域控制器
• Windows 2000 Server 非域控制器
• Windows NT Server 域控制器
• Windows 2000 Server 域控制器
• Windows NT Enterprise/Terminal Server 域控制器
• Windows NT Enterprise/Terminal Server 非域控制器
将以下文本复制到一个批处理文件中: @echo off
REM Batch file to detect OS
REM ----------------------------------
if Windows_NT == %OS% goto WINNT
echo You are not running Windows NT (Windows 95/98 perhaps?)
goto END

:WINNT
gettype.exe

if errorlevel=9 goto FILENOTFOUND

echo You are running Windows NT.
echo More Specifically:
echo.


if ERRORLEVEL=8 goto EIGHT
if ERRORLEVEL=7 goto SEVEN
if ERRORLEVEL=6 goto SIX
if ERRORLEVEL=5 goto FIVE
if ERRORLEVEL=4 goto FOUR
if ERRORLEVEL=3 goto THREE
if ERRORLEVEL=2 goto TWO
if ERRORLEVEL=1 goto ONE

:FILENOTFOUND
echo.
echo Gettype not found.
echo.
goto END

:EIGHT
echo Windows NT Enterprise/Terminal Server Non-Domain Controller
goto END

:SEVEN
echo Windows NT Enterprise/Terminal Server Domain Controller
goto END

:SIX
echo Windows 2000 Server Domain Controller
goto END

:FIVE
echo Windows NT Server Domain Controller
goto END

:FOUR
echo Windows 2000 Server Non-Domain Controller
goto END

:THREE
echo Windows NT Server Non-Domain Controller
goto END

:TWO
echo Windows 2000 Professional installation
goto END

:ONE
echo Windows NT Workstation
goto END

:END
pause
                               
将 Gettype.exe 文件和该批处理文件复制到目标工作站并运行该批处理文件。

您可以安装 Windows 2000 Resource Kit 工具,然后便可从中获得 Gettype.exe 4.0 版。 Gettype.exe 的运行方式是,在注册表中查询安装类型并相应地设置 DOS ERRORLEVEL: • 如果安装类型是 Windows NT Workstation,就会返回 1。
• 如果安装类型是 Windows 2000 Professional,则返回 2。
• 如果安装类型是 Windows NT Server 非域控制器,则返回 3。
• 如果安装类型是 Windows 2000 Server 非域控制器,则返回 4。
• 如果安装类型是 Windows NT Server 域控制器,则返回 5。
• 如果安装类型是 Windows 2000 Server 域控制器,则返回 6。
• 如果安装类型是 Windows NT Enterprise/Terminal Server 域控制器,则返回 7。
• 如果安装类型是 Windows NT Enterprise/Terminal Server 非域控制器,则返回 8。
可以用 /s 参数来设置安静模式。您也可以对远程计算机运行此工具。

--------------------------------------------------------------------------------

这篇文章中的信息适用于:
• Microsoft Windows 2000 Advanced Server
• Microsoft Windows 2000 Professional Edition
• Microsoft Windows 2000 Server
• Microsoft Windows NT Server 4.0 Terminal Server(终端服务器)
• Microsoft Windows NT Server 3.51
• Microsoft Windows NT Server 4.0 Standard Edition
• Microsoft Windows NT Workstation 3.51
• Microsoft Windows NT Workstation 4.0 开发员版
• Microsoft Windows NT Server 4.0 企业版
• Microsoft Windows 98 Standard Edition
• Microsoft Windows 95

2006-6-8 11:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
suiyuanye
中级用户




积分 289
发帖 94
注册 2006-6-6
状态 离线
『第 5 楼』:  

我的水平差,看的不是太懂,我所要功能只是判断操作系统类别,分别导入自己的注册表文件。不懂是否使用扩展特性,高手说说

@echo off
如果是win98,winme,winNT,则运行regedit /s for98.reg
如果是2000,XP,2003,则运行regedit /s forxp.reg
start startor.exe
start /min privoxy.exe
start sc32.exe

2006-6-8 11:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 6 楼』:  

Re suiyuanye:

      如果仅是为导入注册表文件,且其中修改的注册表键值相同,则完全可以仅用98下的版本导入,因为2K/XP/2K3也支持REGEDIT4格式。

      如果它们导入的键值不同,可以使用3楼提到的几种方法。建议使用变量%OS%[1]。但是,因为WinNT4.x也提供了系统变量%OS%,而它仅支持REGEDIT4格式的注册表,所以使用变量%OS%判断将无法兼容NT4。尽管事实上,我们的个人代码也很少提供对NT4的支持了。

      不过,虽然现在我无法得知NT4的命令扩展版本号,但曾记得NT4的命令行默认不开启命令扩展,因此可以使用第三种方案[2],同时为了兼容更新的系统,我们略作改变,仅判断它是否存在,而不再判断其具体内容。

[1]
if "%OS%"=="Windows_NT" regedit /s forxp.reg
if "%OS%"=="" regedit /s for98.reg
[2]
if not "%CmdExtVersion%"=="" regedit /s forxp.reg
if "%CmdExtVersion%"=="" regedit /s for98.reg




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-8 12:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
suiyuanye
中级用户




积分 289
发帖 94
注册 2006-6-6
状态 离线
『第 7 楼』:  

re: willsort  知道如何感谢你才好呢,你太让我happle了

这样吧,不用考虑NT了,只是这样,
win98 winme运行regedit /s forxp.reg
win2000 winXP win2003运行regedit /s for98.reg

2006-6-8 12:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 8 楼』:  

Re suiyuanye:

      所有的方案我都已经给出,有考虑NT4的版本[1]和不考虑NT4的版本[2],不需要再重贴了。

      另外,再次提请修改主题的标题。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-8 12:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 9 楼』:  

re  suiyuanye:
     看下下面的命令满足要求不?
for  %os%#==# do regedit /s for98.reg
for not  %os%#==# do regedit /s forxp.reg



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-6-8 13:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
suiyuanye
中级用户




积分 289
发帖 94
注册 2006-6-6
状态 离线
『第 10 楼』:  

这个问题,已经解决了,谢谢各位,

2006-6-8 13:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 11 楼』:  


───────────────── 版务记录 ─────────────────
执行:Will Sort
操作:修改标题 - 批处理文件的问题,请进。
说明:原主题作者在通知发出三日后仍未申诉或修改,由版主修改并进行处罚
处罚:扣除因发表该主题而奖励的6点积分,扣除标题违规惩罚性2点积分
───────────────── 版务记录 ─────────────────




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-14 17:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chainliq
高级用户

学无尽止


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

@echo off
start /s regedit "C:\Program Files\admin\解锁.reg"

请问这样为什么不能导入指定的注册表项呢

2006-9-20 16:47
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (86682419)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 13 楼』:  

  如果是XP的系统,把 start 命令换成 regedit 就可以了,其他系统暂时没条件测试。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-21 00:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: