中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-25 22:17
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » [求助]请问有没有通用判断系统启动分区盘符的方法? 查看 2,196 回复 24
16 发表于 2007-11-14 22:31 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
确实没有变通的方法,你们说的情况我都遇到过,自己也尝试各种各样的安装方式,最后还是用判断boot.ini windows winnt io.sys这些特定的文件来定位。甚至用磁盘工具来分析如gdisk32 ghost32还有GOTOmsdos兄的TOdisk。真的没什么好方法
第一高手 第二高手

17 发表于 2007-11-15 10:14 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
大家看看这个通用性怎样
@echo off
for /f "skip=2 tokens=1* delims=," %%a in ('WMIC Path Win32_DiskPartition Where "BootPartition=true" Get DeviceID /Format:csv') do set BootPartition=%%b
for /f "tokens=1 delims=" %%a in ('WMIC Path Win32_LogicalDiskToPartition Get Antecedent^,Dependent /Format:list ^| find /n "=" ^| find /i "%BootPartition%"') do set LineNum=%%a
set /a LineNum+=1
for /f "tokens=3 delims==" %%a in ('WMIC Path Win32_LogicalDiskToPartition Get Antecedent^,Dependent /Format:list ^| find /n "=" ^| findstr /b /l /c:""') do set BootDrive=%%~a
for /f "tokens=1,2 delims=," %%a in ("%BootPartition%") do (set BootDisk=%%a)&(set BootPartition=%%b)
set BootPartition=%BootPartition:~1%
set BootDrive=%BootDrive:"=%
set Boot
pause
第一高手 第二高手

18 发表于 2007-11-15 16:34 ·  中国 广东 广州 越秀区 电信
初级用户
积分 176
发帖 24
注册 2003-02-21 00:00
23年会员
UID 965
性别 男
状态 离线
Originally posted by fastslz at 2007-11-15 10:14 AM:
大家看看这个通用性怎样
@echo off
for /f "skip=2 tokens=1* delims=," %%a in ('WMIC Path Win32_DiskPartition Where "BootPartition=true" Get DeviceID /Format:csv ...



请教楼上如何使用, 我复制到批处理文件中执行没反应哦

小弟现在用直接读注册表的方法

for /f "skip=4 tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\ /v bootdir') do Set bootdir=%%i


[ Last edited by forumz on 2007-11-15 at 04:36 PM ]
19 发表于 2007-11-15 17:06 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
需要WMIC命令,XP Home.2000没有该命令
第一高手 第二高手

20 发表于 2007-11-15 17:25 ·  中国 广东 广州 越秀区 电信
初级用户
积分 176
发帖 24
注册 2003-02-21 00:00
23年会员
UID 965
性别 男
状态 离线
可以执行了, 原来调用WMIC有点慢, 我看到没反应就关掉执行批处理的那个窗口了. 等了一会执行完返回的的 bootdrive 貌似不是我电脑的启动分区.

我这里是两个硬盘, 启动硬盘是Disk #0, 启动分区是C:
脚本执行后返回
BootDisk=Disk #1
BootDrive=H:
BootPartition=Partition #0

H: 盘是我的WINXP系统下第二个硬盘的第一分区

是否脚本没考虑多硬盘的可能性呢? 因为第一句的 for 循环执行了两次, bootpartition 先被赋了disk #0的信息, 然后再赋了 disk #1 的信息.
21 发表于 2007-11-15 17:41 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
BootDisk=Disk #1
BootDrive=H:
BootPartition=Partition #0

我也是双硬盘显示
BootDisk=Disk #0
BootDrive=C:
BootPartition=Partition #0

估计你的第2个硬盘在IDE主位置,我试了删除C盘boot.ini,ntldr.io.sys改变你上面所说的注册表键值,及%windir%还是正确判断的,估计WMIC读取 BIOS和硬盘信息分析的
不过还发现当插入U BootDrive也就是U盘盘符了
第一高手 第二高手

22 发表于 2007-11-15 17:51 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
哦忘了说明我第2硬盘主分区是可引导的包含boot.ini
第一高手 第二高手

23 发表于 2007-11-15 17:54 ·  中国 广东 广州 越秀区 电信
初级用户
积分 176
发帖 24
注册 2003-02-21 00:00
23年会员
UID 965
性别 男
状态 离线
我两个硬盘分别是 IDE1的Master 和IDE2的Master, 启动分区所在的硬盘是IDE1的Master.

第二硬盘是没有可启动的分区的

[ Last edited by forumz on 2007-11-15 at 05:55 PM ]
24 发表于 2007-11-15 18:28 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
我是80线上Master slave,所以说吧安装硬件方式也各种各样的,这代码也不通用
第一高手 第二高手

25 发表于 2007-11-15 18:40 ·  中国 广东 广州 越秀区 电信
初级用户
积分 176
发帖 24
注册 2003-02-21 00:00
23年会员
UID 965
性别 男
状态 离线
看来还是遍历判断特定文件方法算是比较简单通用的了, 判断后给用户一个提示, 如果不对让用户手动输入启动分区盘符, 哈哈, 解决....
论坛跳转: