![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-29 07:06 |
共 47,816 主题排行 / 349,916 发帖 / 今日 2 篇 / 48,265 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已结]如何判断操作系统类别导入相应的注册表 |
| 可打印版本 3,470 / 12 |
| 第1楼 suiyuanye | 发表于 2006-06-08 10:26 |
| 中级用户 发帖 94 积分 289 | |
|
[已结]如何判断操作系统类别导入相应的注册表 判断操作系统类别的批处理,如下
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 Microsoft Windows XP [ Last edited by willsort on 2006-6-14 at 17:12 ] |
|
| 第2楼 bagpipe | 发表于 2006-06-08 10:35 |
| 银牌会员 发帖 425 积分 1,144 来自 北京 | |
|
我想楼主的代码中存在一些问题,例如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语句可以写到一行以精简语句,所以楼主的代码存在很多问题 |
|
| 第3楼 willsort | 发表于 2006-06-08 11:15 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
───────────────── 版主提示 ───────────────── 为了便于论坛用户浏览和版主管理,请您修改本主题的标题,以简要叙述主题的内容或意图 如果您确认标题不需要修改,请继续回复该主题进行申辩,若申辩理由充分,将取消该通知 如果您确认标题需要修改,请点击该主题首帖下方"编辑"按钮,在编辑页面中修改标题栏 如果此通知发出三日后您仍未进行申诉或修改,将由版主进行修改,并对作者进行相应处罚 处罚为扣除8点积分,包括追回您因发表主题奖励的6分和因标题违规而惩罚性扣除的2分 在得知您做出积极恰当的回应后,版主将在三个工作日内删除本提示以消除对您的不利影响 ───────────────── 版主提示 ───────────────── Re suiyuanye: 确实,你的代码存在一些比较重要的缺陷。 因为在98/Me的命令行中不提供 for/f 等许多命令扩展特性的支持,所以程序兼容的立足点无法得到保障。 判断系统版本最简单的方法是 ver | find "" >nul if not errorlevel 1 goto ver | find "" >nul if not errorlevel 1 goto ...... 但如果用于批处理代码中是否使用扩展特性的选择,则更常用的方法是 if "%OS%"=="Windows_NT" ... 因为绝大部分支持%OS%变量的命令行环境都支持命令扩展特性,但也有一些例外,比如关闭命令扩展的CMD/y命令行。如果需要考虑这个特殊的命令行环境,可以使用如下语句判别命令行环境。 if "%CmdExtVersion%"=="2" ... [ Last edited by willsort on 2006-6-8 at 11:22 ] |
|
| 第4楼 suiyuanye | 发表于 2006-06-08 11:52 |
| 中级用户 发帖 94 积分 289 | |
|
微软网站找到的
如何确定登录脚本中的 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 |
|
| 第5楼 suiyuanye | 发表于 2006-06-08 11:59 |
| 中级用户 发帖 94 积分 289 | |
|
我的水平差,看的不是太懂,我所要功能只是判断操作系统类别,分别导入自己的注册表文件。不懂是否使用扩展特性,高手说说
@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 |
|
| 第6楼 willsort | 发表于 2006-06-08 12:18 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re suiyuanye:
如果仅是为导入注册表文件,且其中修改的注册表键值相同,则完全可以仅用98下的版本导入,因为2K/XP/2K3也支持REGEDIT4格式。 如果它们导入的键值不同,可以使用3楼提到的几种方法。建议使用变量%OS%。但是,因为WinNT4.x也提供了系统变量%OS%,而它仅支持REGEDIT4格式的注册表,所以使用变量%OS%判断将无法兼容NT4。尽管事实上,我们的个人代码也很少提供对NT4的支持了。 不过,虽然现在我无法得知NT4的命令扩展版本号,但曾记得NT4的命令行默认不开启命令扩展,因此可以使用第三种方案,同时为了兼容更新的系统,我们略作改变,仅判断它是否存在,而不再判断其具体内容。 |
|
| 第7楼 suiyuanye | 发表于 2006-06-08 12:42 |
| 中级用户 发帖 94 积分 289 | |
|
re: willsort 知道如何感谢你才好呢,你太让我happle了
这样吧,不用考虑NT了,只是这样, win98 winme运行regedit /s forxp.reg win2000 winXP win2003运行regedit /s for98.reg |
|
| 第8楼 willsort | 发表于 2006-06-08 12:46 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re suiyuanye:
所有的方案我都已经给出,有考虑NT4的版本[1]和不考虑NT4的版本[2],不需要再重贴了。 另外,再次提请修改主题的标题。 |
|
| 第9楼 不得不爱 | 发表于 2006-06-08 13:14 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
re suiyuanye:
看下下面的命令满足要求不? for %os%#==# do regedit /s for98.reg for not %os%#==# do regedit /s forxp.reg |
|
| 第10楼 suiyuanye | 发表于 2006-06-08 13:45 |
| 中级用户 发帖 94 积分 289 | |
|
这个问题,已经解决了,谢谢各位,
|
|
| 第11楼 willsort | 发表于 2006-06-14 17:11 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
───────────────── 版务记录 ───────────────── 执行:Will Sort 操作:修改标题 - 批处理文件的问题,请进。 说明:原主题作者在通知发出三日后仍未申诉或修改,由版主修改并进行处罚 处罚:扣除因发表该主题而奖励的6点积分,扣除标题违规惩罚性2点积分 ───────────────── 版务记录 ───────────────── |
|
| 第12楼 chainliq | 发表于 2006-09-20 16:47 |
| 高级用户 发帖 244 积分 635 来自 广西贵港 | |
|
@echo off
start /s regedit "C:\Program Files\admin\解锁.reg" 请问这样为什么不能导入指定的注册表项呢 |
|
| 第13楼 namejm | 发表于 2006-09-21 00:31 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
如果是XP的系统,把 start 命令换成 regedit 就可以了,其他系统暂时没条件测试。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |