|
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 来自 上海
状态 离线
|
|
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 来自 上海
状态 离线
|
|
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 |
|