找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21187|回复: 7

[注册表类] 批处理如何判断计算机类型然后打开或关闭数字键?

[复制链接]
发表于 2011-1-5 13:49:03 | 显示全部楼层 |阅读模式
意图如下:
1、判断计算机是台式机还是笔记本
2、根据1返回的结果修改注册表,如果是台式机则打开数字键,如果是笔记本则关闭数字键

请问批处理代码应该怎样写?

另外我写了一个代码但是无法正确达到目的,清帮忙指正。谢谢
  1. wmic path Win32_SystemEnclosure get ChassisTypes /value >ChssisTypes.log
  2. FOR /F "skip=2 delims==" %%I IN (ChssisTypes.log) DO (
  3. SET T=%%I
  4. IF "%T%"=="{3}" REG ADD "HKEY_USERS\.DEFAULT\Control Panel\Keyboard" /v "InitialKeyboardIndicators" /d "2" /f
  5. IF "%T%"=="{10}" REG ADD "HKEY_USERS\.DEFAULT\Control Panel\Keyboard" /v "InitialKeyboardIndicators" /d "0" /f
  6. )
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-5 14:56 编辑 ]
发表于 2011-1-5 13:57:40 | 显示全部楼层
  1. @echo off&setlocal enableDelayedExpansion
  2. for /f "tokens=2 delims==" %%a in ('wmic path Win32_SystemEnclosure get ChassisTypes /value') do (
  3.         set a=%%a
  4.         set b=0
  5.         if !a:~1^,-2!==10 set b=2
  6.         REG ADD "HKU\.DEFAULT\Control Panel\Keyboard" /v InitialKeyboardIndicators /d !b! /f
  7. )
  8. pause
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-5 14:05 编辑 ]
 楼主| 发表于 2011-1-5 14:39:46 | 显示全部楼层

回复 2楼 的帖子

谢谢你的代码,我的电脑是台式机,但是我运行后发现注册表相关项的值是0而不是2。请问是怎么回事?
发表于 2011-1-5 14:44:35 | 显示全部楼层
如果要求台机时设置为2,则:
  1. @echo off&setlocal enableDelayedExpansion
  2. for /f "tokens=2 delims==" %%a in ('wmic path Win32_SystemEnclosure get ChassisTypes /value') do (
  3.         set a=%%a
  4.         set b=0
  5.         if !a:~1^,-2!==3 set b=2
  6.         REG ADD "HKU\.DEFAULT\Control Panel\Keyboard" /v InitialKeyboardIndicators /d !b! /f
  7. )
复制代码
 楼主| 发表于 2011-1-5 15:09:48 | 显示全部楼层

回复 4楼 的帖子

谢谢
再请问一下!a:~1^,-2!的意思是?
如果是在安装系统的过程中运行本代码,setlocal一行还有效吗?如果不能使用setlocal,那么代码应该如何修改?

[ 本帖最后由 crist 于 2011-1-5 15:10 编辑 ]
发表于 2011-1-5 15:22:43 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=2 delims==" %%a in ('wmic path Win32_SystemEnclosure get ChassisTypes /value') do set a=%%a
  3. set b=0
  4. if %a%=={3} set b=2
  5. REG ADD "HKU\.DEFAULT\Control Panel\Keyboard" /v InitialKeyboardIndicators /d %b% /f
复制代码

评分

参与人数 1技术 +1 收起 理由
crist + 1 谢谢你的耐心指教。

查看全部评分

 楼主| 发表于 2011-1-5 19:46:34 | 显示全部楼层

回复 6楼 的帖子

谢谢,在进入系统之后运行能行,我再把这段代码放到xp安装版T12阶段运行看是否成功。

附带问一句,你知道网上那些ghostxp是怎样实现判断计算机类型然后自动开启或关闭数字键的吗?
 楼主| 发表于 2011-1-6 14:18:37 | 显示全部楼层

回复 6楼 的帖子

在虚拟机测试:
1.在未进入桌面的情况下此批处理的运行结果是:
"InitialKeyboardIndicators"="0x80000000"

2.在进入桌面后运行则能正确修改注册表。
"InitialKeyboardIndicators"="0"
备注:虚拟机的计算机类型返回数值是{1}

这可能是因为
path Win32_SystemEnclosure get ChassisTypes /value
必须要在桌面环境运行吧

不知有什么办法能在安装系统的过程中(例如T13或者T12阶段)判断计算机类型然后打开/关闭数字键?
听说可以通过vbs脚步来实现,但不知应该怎么写代码。

[ 本帖最后由 crist 于 2011-1-6 14:20 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 13:30 , Processed in 0.022187 second(s), 10 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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