中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » [求助]请问有没有通用判断系统启动分区盘符的方法?
« [1] [2] »
作者:
标题: [求助]请问有没有通用判断系统启动分区盘符的方法? 上一主题 | 下一主题
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 16 楼』:  

确实没有变通的方法,你们说的情况我都遇到过,自己也尝试各种各样的安装方式,最后还是用判断boot.ini windows winnt io.sys这些特定的文件来定位。甚至用磁盘工具来分析如gdisk32 ghost32还有GOTOmsdos兄的TOdisk。真的没什么好方法



第一高手    第二高手

2007-11-14 22:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 17 楼』:  

大家看看这个通用性怎样
@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:"[%LineNum%]"') 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




第一高手    第二高手

2007-11-15 10:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
forumz
初级用户




积分 176
发帖 24
注册 2003-2-21
状态 离线
『第 18 楼』:  



  Quote:
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 ]

2007-11-15 16:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 19 楼』:  

需要WMIC命令,XP Home.2000没有该命令



第一高手    第二高手

2007-11-15 17:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
forumz
初级用户




积分 176
发帖 24
注册 2003-2-21
状态 离线
『第 20 楼』:  

可以执行了, 原来调用WMIC有点慢, 我看到没反应就关掉执行批处理的那个窗口了. 等了一会执行完返回的的 bootdrive 貌似不是我电脑的启动分区.

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

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

是否脚本没考虑多硬盘的可能性呢?  因为第一句的 for 循环执行了两次, bootpartition 先被赋了disk #0的信息, 然后再赋了 disk #1 的信息.

2007-11-15 17:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 21 楼』:  

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盘盘符了



第一高手    第二高手

2007-11-15 17:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 22 楼』:  

哦忘了说明我第2硬盘主分区是可引导的包含boot.ini



第一高手    第二高手

2007-11-15 17:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
forumz
初级用户




积分 176
发帖 24
注册 2003-2-21
状态 离线
『第 23 楼』:  

我两个硬盘分别是 IDE1的Master 和IDE2的Master, 启动分区所在的硬盘是IDE1的Master.

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

[ Last edited by forumz on 2007-11-15 at 05:55 PM ]

2007-11-15 17:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 24 楼』:  

我是80线上Master slave,所以说吧安装硬件方式也各种各样的,这代码也不通用



第一高手    第二高手

2007-11-15 18:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
forumz
初级用户




积分 176
发帖 24
注册 2003-2-21
状态 离线
『第 25 楼』:  

看来还是遍历判断特定文件方法算是比较简单通用的了, 判断后给用户一个提示, 如果不对让用户手动输入启动分区盘符, 哈哈, 解决....

2007-11-15 18:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: