无忧启动论坛

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

[求助] CMD的一个问题

[复制链接]
跳转到指定楼层
1#
发表于 2013-10-27 10:21:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 2011epe 于 2013-10-28 22:28 编辑

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

谢谢啦!

2楼基本上有思路,谢谢11楼
2#
 楼主| 发表于 2013-10-27 20:00:23 | 只看该作者
本帖最后由 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%"

回复

使用道具 举报

3#
发表于 2013-10-27 20:34:32 | 只看该作者
先不说遍历批处理的正确与否
好像没有先给隐藏分区分配盘符吧
好像之前命令行需要先加SHOW  0:-1
回复

使用道具 举报

4#
 楼主| 发表于 2013-10-27 20:53:15 | 只看该作者
zlgs 发表于 2013-10-27 20:34
先不说遍历批处理的正确与否
好像没有先给隐藏分区分配盘符吧
好像之前命令行需要先加SHOW  0:-1

额,我这是在PE中检测本地硬盘中winxp,隐藏分区不会存在winxp系统吧
回复

使用道具 举报

5#
发表于 2013-10-27 21:36:40 | 只看该作者
这话说的
你的WINXP不是主分区吗
PE一般显示进PE前你的主分区为C盘
C到Z盘毕竟只是相对路径
XP是C还是7、8是C还不一定呢
视环境而定
有NTLDR也不一定是XP
GRLDR也可以改名直接接管进PE
回复

使用道具 举报

6#
 楼主| 发表于 2013-10-27 21:46:14 | 只看该作者
zlgs 发表于 2013-10-27 21:36
这话说的
你的WINXP不是主分区吗
PE一般显示进PE前你的主分区为C盘

我不知道你看我批处理了吗?你说这些我都承认。
回复

使用道具 举报

7#
发表于 2013-10-27 22:13:16 | 只看该作者
如果xp安装在逻辑D:盘,但ntldr依然在主分区(C:盘)
这种情况批处理将无视xp的存在
回复

使用道具 举报

8#
 楼主| 发表于 2013-10-27 22:15:51 | 只看该作者
本帖最后由 2011epe 于 2013-10-27 22:22 编辑
pznpt 发表于 2013-10-27 22:13
如果xp安装在逻辑D:盘,但ntldr依然在主分区(C:盘)
这种情况批处理将无视xp的存在


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

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

回复

使用道具 举报

9#
发表于 2013-10-27 22:22:09 | 只看该作者
2011epe 发表于 2013-10-27 22:15
嗯,有道理,您有好解决办法吗?

其实办法你已经想出来了,直接挂载注册表文件判断。。。
回复

使用道具 举报

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


水平比较低,能不能帮忙写个FOR语句?
有且仅有一个windowxp时,输出所在盘符
回复

使用道具 举报

11#
发表于 2013-10-27 22:56:13 | 只看该作者
@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

没做测试
回复

使用道具 举报

12#
 楼主| 发表于 2013-10-28 20:36:30 | 只看该作者
pznpt 发表于 2013-10-27 22:56
没做测试

谢谢,测试没问题!
回复

使用道具 举报

13#
发表于 2013-10-29 17:10:12 | 只看该作者
2011epe 发表于 2013-10-27 20:53
额,我这是在PE中检测本地硬盘中winxp,隐藏分区不会存在winxp系统吧

没开变量延时,
FOR语句是一条命令
就只能在FOR语句内取到倒数第二个盘符。 要么就要用CAll 语句加双百分号对 吊用最后的盘符
回复

使用道具 举报

14#
发表于 2013-10-30 09:29:48 | 只看该作者
REG QUERY "%v_reg%" /v ProductName|find /i "Microsoft Windows XP"
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-1 01:07

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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