中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问,如何用批处理来判断系统安装在哪个分区?
作者:
标题: 请问,如何用批处理来判断系统安装在哪个分区? 上一主题 | 下一主题
afeichai
初级用户




积分 171
发帖 78
注册 2006-11-22
状态 离线
『楼 主』:  请问,如何用批处理来判断系统安装在哪个分区?

对于批处理,我是门外汉。我在无忧看到了如下代码,原来也是这里的大侠给的

这段代码的用处是用来更换XP开机画面的时候来修改BOOT.INI的。我试验了,非常好。
@echo off
if exist boot.new del boot.new
if not exist boot.ini goto :eof
for /f "delims=" %%l in (boot.ini) do (
    echo.%%l | find /i "/fastdetect" | find /v /i "/kernel">nul && echo %%l /kernel=kernel.exe||echo %%l
)>>boot.new
attrib -s -h -r boot.ini
copy boot.new boot.ini>nul
attrib +s +h +r boot.ini

但也有不足,对于多系统来说,他会把/fastdetect后面都加上/kernel=kernel.exe,如果下次启动到另外系统就无法启动了。另外,开机画面2000,XP,2003都不同,不能判断系统


不知道是否能用批处理来做到下面的几点?
1.判断是否是XP系统,是,进行后面的操作,否,提出警告,然后退出
2.如果是XP系统,判断该系统安装的哪个分区,然后修改BOOT.INI里面相应的系统
3.在修改的时候,自动添加一项现在系统的启动项目在最后。

我太菜了,说不清楚,给个例子
如BOOT.INI下是这样的
[boot loader]
timeout=5
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Standard 精简版" /fastdetect
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows XP" /fastdetect

我只想在multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows XP" /fastdetect
后面加,请问可以做到吗?

多谢解答

2006-11-23 02:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 2 楼』:  

@echo off
if exist boot.new del boot.new
if not exist boot.ini goto :eof
for /f "delims=" %%l in (boot.ini) do (
    echo.%%l | find /i "Windows XP" | find /v /i "/kernel">nul && echo %%l /kernel=kernel.exe||echo %%l
)>>boot.new
attrib -s -h -r boot.ini
copy boot.new boot.ini>nul
attrib +s +h +r boot.ini



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-11-23 02:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
afeichai
初级用户




积分 171
发帖 78
注册 2006-11-22
状态 离线
『第 3 楼』:  

多谢版主。但你的好像也不能解决这个问题。如果多系统都是XP,那他还是会给每个都加上的。我是用下面的解决分区问题,如何来判断系统安装在partition(2),这个是我关心的,也就是说,几个分区都有系统,修改的时候,我只想修改当前(真在运行的)系统的,其他的不动。
@echo off
if exist boot.new del boot.new
if not exist boot.ini goto :eof

for /f "delims=" %%l in (boot.ini) do (
    echo.%%l | find /i "partition(2)\WINDOWS=" | find /v /i "/kernel">nul && echo %%l /kernel=kernel.exe||echo %%l
)>>boot.new
attrib -s -h -r boot.ini
copy boot.new boot.ini>nul
attrib +s +h +r boot.ini

2006-11-23 02:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
afeichai
初级用户




积分 171
发帖 78
注册 2006-11-22
状态 离线
『第 4 楼』:  

也许是我的表达不够清晰吧
还请各位大侠帮忙看看,能否用批处理完成这个任务

2006-11-23 08:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 5 楼』:  

这个就与你的硬盘个数有关系



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-11-23 08:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
afeichai
初级用户




积分 171
发帖 78
注册 2006-11-22
状态 离线
『第 6 楼』:  

假设是一块硬盘,那么如何来判断当前系统类型和系统所在分区呢?
谢谢了

2006-11-23 08:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 7 楼』:  

  判断当前系统版本,使用 ver 命令比查找 boot.ini 更准确。至于当前系统安装在哪个分区上,则使用 %systemdive% 或者 %systemroot% 可以准确定位。至于当前系统对应 boot.ini 中的哪条记录,用 findstr 正则表达式应不难得到。因我对 boot.ini 中的含义不甚了解,只能提供个思路给你。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-11-23 08:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
afeichai
初级用户




积分 171
发帖 78
注册 2006-11-22
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by namejm at 2006-11-22 07:48 PM:
  判断当前系统版本,使用 ver 命令比查找 boot.ini 更准确。至于当前系统安装在哪个分区上,则使用 %systemdive% 或者 %systemroot% 可以准确定位。至于堮..

多谢namejm,经常在无忧看到你精彩的回答。可惜我对批处理一无所知。我提供的代码也是在论坛里面看到的。只是爱捣鼓XP系统。看到了这个代码后试验了下,发现可以代替手工劳动了。但觉得不够完美,提出问题
/kernel在BOOT.INI的含义是开机的时候,用他后面指定的文件来代替ntoskrnl.exe初始化系统,=后面的文件保存在system32中即可。这样就可以个性化开机画面了。不同系统ntoskrnl.exe不同,不能通用,所以提出上面的问题。
另外,在修改后,如
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Standard 精简版" /fastdetect /kernel=kernel.exe
最好能再把multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Standard 精简版" /fastdetect 改为
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Standard 精简版BAK" /fastdetect,这样,万一改坏了,可以用这个选项进入系统

2006-11-23 09:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 9 楼』:  

  网上搜索了一下boot.ini的介绍,稍微了解了一下里面各个记录的含义,发现它有个缺憾:只能记录操作系统是2K还是XP等版本系列,但是并没有记录该版本的语言类别(即究竟是中文版还是英文版等等);另外,partition(1)里面的数字表示的是第几个分区,还得对某个分区对应着某个序号做个判断(似乎第N个分区不一定是第N个字母所表示的盘符,因为我对分区情况不是很了解,不知道这个说法是否正确),要做到通用性似乎比较困难。

[ Last edited by namejm on 2006-11-22 at 08:38 PM ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-11-23 09:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
afeichai
初级用户




积分 171
发帖 78
注册 2006-11-22
状态 离线
『第 10 楼』:  

谢谢namejm

BOOT.INI里面,partition只代表分区partition(1)代表第一分区,和字母(盘符)无关,因为盘符在NT系统中可以重新指定。

2006-11-23 10:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 11 楼』:  

  如果分区和盘符无关的话,那就很麻烦了,因为 %systemdrive% 取到的只是盘符,而不能获取分区的序号。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-11-23 10:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
afeichai
初级用户




积分 171
发帖 78
注册 2006-11-22
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by namejm at 2006-11-22 09:12 PM:
  如果分区和盘符无关的话,那就很麻烦了,因为 %systemdrive% 取到的只是盘符,而不能获取分区的序号。

多谢了。看样子是不能通用解决了。谢谢各位大侠。此贴可结了

2006-11-23 10:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: