无忧启动论坛

标题: CMD的一个问题 [打印本页]

作者: 2011epe    时间: 2013-10-27 10:21
标题: CMD的一个问题
本帖最后由 2011epe 于 2013-10-28 22:28 编辑

我想在PE下判断硬盘有多少个winxp,当有且仅有一个时,请输出盘符?

谢谢啦!

2楼基本上有思路,谢谢11楼
作者: 2011epe    时间: 2013-10-27 20:00
本帖最后由 2011epe 于 2013-10-28 22:40 编辑

只给出判断部分

@echo off
color 2f
set tempfile=x:\Rescs.txt
:: 列出所有本地硬盘所有分区
for %%a in (C D E F G H I J K L M N O P Q R S T) do (
fsutil fsinfo drivetype %%a:|find "固定驱动器"&&set "LstDr=%%a"&&echo %%a>>%tempfile%)
echo 磁盘的最后一个分区:%LstDr%,列出本地硬盘所有分区:
for /f %%b in (%tempfile%) do echo %%b

:: 获取Win7系统个数
set s=0
set "v_reg=HKLM\SOFTWARE_X\Microsoft\Windows NT\CurrentVersion"
for /f %%i in (%tempfile%) do (
     if exist %%i:\WINDOWS\SYSTEM32\CONFIG\SOFTWARE (
         REG LOAD HKLM\SOFTWARE_X  %%i:\WINDOWS\SYSTEM32\CONFIG\SOFTWARE
         REG QUERY "%v_reg%" /v ProductName|find /i "Windows 7" && (set /a s+=1 & set "Drvs=%%i")
         REG UNLOAD HKLM\SOFTWARE_X
     )
)
echo 硬盘中存在%s%个Win7系统,其中在"%Drvs%"盘存在一个。


:: 获取WinXP系统个数
set m=0
set "v_reg=HKLM\SOFTWARE_X\Microsoft\Windows NT\CurrentVersion"
for /f %%d in (%tempfile%) do (
     if exist %%d:\WINDOWS\SYSTEM32\CONFIG\SOFTWARE (
         REG LOAD HKLM\SOFTWARE_X  %%d:\WINDOWS\SYSTEM32\CONFIG\SOFTWARE
         REG QUERY "%v_reg%" /v ProductName|find /i "Microsoft Windows XP" && (set /a m+=1 & set "Drvp=%%d")
         REG UNLOAD HKLM\SOFTWARE_X
     )
)
echo 硬盘中存在%m%个WinXP系统,其中在%Drvp%盘存在一个。

del /f /s /q "%tempfile%"


作者: zlgs    时间: 2013-10-27 20:34
先不说遍历批处理的正确与否
好像没有先给隐藏分区分配盘符吧
好像之前命令行需要先加SHOW  0:-1
作者: 2011epe    时间: 2013-10-27 20:53
zlgs 发表于 2013-10-27 20:34
先不说遍历批处理的正确与否
好像没有先给隐藏分区分配盘符吧
好像之前命令行需要先加SHOW  0:-1

额,我这是在PE中检测本地硬盘中winxp,隐藏分区不会存在winxp系统吧
作者: zlgs    时间: 2013-10-27 21:36
这话说的
你的WINXP不是主分区吗
PE一般显示进PE前你的主分区为C盘
C到Z盘毕竟只是相对路径
XP是C还是7、8是C还不一定呢
视环境而定
有NTLDR也不一定是XP
GRLDR也可以改名直接接管进PE

作者: 2011epe    时间: 2013-10-27 21:46
zlgs 发表于 2013-10-27 21:36
这话说的
你的WINXP不是主分区吗
PE一般显示进PE前你的主分区为C盘

我不知道你看我批处理了吗?你说这些我都承认。
作者: pznpt    时间: 2013-10-27 22:13
如果xp安装在逻辑D:盘,但ntldr依然在主分区(C:盘)
这种情况批处理将无视xp的存在
作者: 2011epe    时间: 2013-10-27 22:15
本帖最后由 2011epe 于 2013-10-27 22:22 编辑
pznpt 发表于 2013-10-27 22:13
如果xp安装在逻辑D:盘,但ntldr依然在主分区(C:盘)
这种情况批处理将无视xp的存在


嗯,有道理,您有好解决办法吗?

window目录下有没有有个系统文件,是NT5必需的,而NT6中不存在?
反之,window目录下有没有有个系统文件,是NT6必需的,而NT5中不存在?


作者: pznpt    时间: 2013-10-27 22:22
2011epe 发表于 2013-10-27 22:15
嗯,有道理,您有好解决办法吗?

其实办法你已经想出来了,直接挂载注册表文件判断。。。
作者: 2011epe    时间: 2013-10-27 22:23
本帖最后由 2011epe 于 2013-10-27 22:24 编辑
pznpt 发表于 2013-10-27 22:22
其实办法你已经想出来了,直接挂载注册表文件判断。。。


水平比较低,能不能帮忙写个FOR语句?
有且仅有一个windowxp时,输出所在盘符
作者: pznpt    时间: 2013-10-27 22:56
@echo off
set "v_reg=HKLM\SOFTWARE_X\Microsoft\Windows NT\CurrentVersion"
for %%a in (c d e f g h i j k l m n o p q r s t u v w) do (
    if exist %%a:\WINDOWS\SYSTEM32\CONFIG\SOFTWARE (
        REG LOAD HKLM\SOFTWARE_X  %%a:\WINDOWS\SYSTEM32\CONFIG\SOFTWARE
        REG QUERY "%v_reg%" /v ProductName|find /i "Microsoft Windows XP" && (set /a n+=1 & set "Drv=%%a:")
        REG UNLOAD HKLM\SOFTWARE_X
    )
)
if "%n%" equ "1" echo XP所在盘为 %Drv% 盘
pause

没做测试
作者: 2011epe    时间: 2013-10-28 20:36
pznpt 发表于 2013-10-27 22:56
没做测试

谢谢,测试没问题!
作者: x9tian    时间: 2013-10-29 17:10
2011epe 发表于 2013-10-27 20:53
额,我这是在PE中检测本地硬盘中winxp,隐藏分区不会存在winxp系统吧

没开变量延时,
FOR语句是一条命令
就只能在FOR语句内取到倒数第二个盘符。 要么就要用CAll 语句加双百分号对 吊用最后的盘符
作者: redmason    时间: 2013-10-30 09:29
REG QUERY "%v_reg%" /v ProductName|find /i "Microsoft Windows XP"




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3