无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 17566|回复: 32
打印 上一主题 下一主题

能否用批处理来修改C盘下boot.ini的内容(已解决)

[复制链接]
跳转到指定楼层
1#
发表于 2006-6-6 17:32:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
能否用批处理结合inf文件在任意电脑上,修改C盘下boot.ini的内容?

   要求:在当前系统启动选项后,添加如图红色方框部分的内容

[ 本帖最后由 老毛桃 于 2006-6-10 10:44 PM 编辑 ]

添加boot.ini内容.jpg (19.78 KB, 下载次数: 102)

jpg

jpg
2#
发表于 2006-6-6 20:33:16 | 只看该作者
好像比较难,我用这样的 For 语句,似乎得不到完整的移行信息,好像到了空格,%i 变量的获取就完成了,不知道 GMY、MagicTek 有何高招
for /f %i in ('findstr "fastdetect" boot.ini') do echo %i
无法将整行内容传送到变量 i
回复

使用道具 举报

3#
 楼主| 发表于 2006-6-6 21:30:42 | 只看该作者
用inf文件也许可以实现,如图,不过我不知道怎样使用此软件!

inf-tools.jpg (31.11 KB, 下载次数: 78)

jpg

jpg
回复

使用道具 举报

4#
发表于 2006-6-6 21:59:30 | 只看该作者
原帖由 fzfchao 于 2006-6-6 21:30 发表
用inf文件也许可以实现,如图,不过我不知道怎样使用此软件!

晕,不早说,你是说要用批处理,那我搞个超级文本替换工具不就直接 OK 了!
回复

使用道具 举报

5#
 楼主| 发表于 2006-6-7 09:31:49 | 只看该作者
老毛桃,“超级文本替换工具”怎么用?请指点!
回复

使用道具 举报

6#
发表于 2006-6-7 15:33:09 | 只看该作者
原帖由 fzfchao 于 2006-6-7 09:31 发表
老毛桃,“超级文本替换工具”怎么用?请指点!

我上传一个给你吧,使用比较方便 SuperTextReplaceV3.0.rar (397.8 KB, 下载次数: 410)

[ 本帖最后由 老毛桃 于 2006-12-1 09:19 AM 编辑 ]
回复

使用道具 举报

7#
发表于 2006-6-7 23:03:38 | 只看该作者
原帖由 fzfchao 于 2006-6-6 17:32 发表
能否用批处理结合inf文件在任意电脑上,修改C盘下boot.ini的内容?

   要求:在当前系统启动选项后,添加如图红色方框部分的内容

呵呵,恭喜楼主,有了办法了,小军军给我上传了这个东东,你直接运行

CHANGE.exe /i boot.ini "/fastdetect" "/fastdetect /kernel=kernel.exe"

就可以了,自动在 fastdetect 后面添加你所要的红线框框中的内容。至于批处理怎么编辑,不用我说了吧。

文件在这里: http://bbs.wuyou.net/attachment.php?aid=661

[ 本帖最后由 老毛桃 于 2006-6-7 11:06 PM 编辑 ]
回复

使用道具 举报

8#
 楼主| 发表于 2006-6-8 11:06:23 | 只看该作者
谢谢,我去试试看,做这个的目的就是为了个性化系统,解决这个贴中手动手动添加的问题
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

9#
 楼主| 发表于 2006-6-8 21:17:39 | 只看该作者
我这样编辑批处理:start CHANGE.exe /i boot.ini "/fastdetect" "/fastdetect /kernel=kernel.exe"
boot.ini后面仍然没有kernel=kernel.exe!是不是批处理错了?
回复

使用道具 举报

10#
发表于 2006-6-8 22:46:15 | 只看该作者
原帖由 fzfchao 于 2006-6-8 21:17 发表
我这样编辑批处理:start CHANGE.exe /i boot.ini "/fastdetect" "/fastdetect /kernel=kernel.exe"
boot.ini后面仍然没有kernel=kernel.exe!是不是批处理错了?

CTBOOT.CMD
@ECHO OFF
SET BTINI=C:\BOOT.INI
ATTRIB -S -H -R %BTINI%
START CHANGE.EXE /I %BTINI% "/fastdetect" "/fastdetect /kernel=kernel.exe"
ATTRIB +S +H +R %BTINI%

你需要先去掉 BOOT.INI 的只读属性。
这是借助于外部命令 CHANGE.EXE 的方法,老毛桃有作出了一个不借助外部命令,直接使用 Windows 自带的命令。在这里,不妨看一下

CGBoot.rar

5.21 KB, 下载次数: 381, 下载积分: 无忧币 -2

评分

参与人数 1无忧币 +10 收起 理由
6618 + 10

查看全部评分

回复

使用道具 举报

11#
发表于 2006-6-10 20:18:47 | 只看该作者
Re 老毛桃:

      兄在中国DOS联盟论坛发的主题已经有回复了。

      下载了你的提供的 cgboot.exe ,在首次的测试中,有意分别使用了a和b应答提问,结果操作结果错误,并且没有发现备份。

      因为是封装后的批处理程序(在此对兄封装它的目的感到不解),所以颇费了一番周折,才得知是采用了bootcfg+for/f的算法,感觉代码存在以下问题。

      首先,兄应该对 delims=; 存在误解,此选项是将 for/f 的切分符由缺省的空格设为分号,此时如果在 /fastdetect 一行中存在分号(比如在提示语中),则程序将运行出错。正确的做法应该是 delims=或者tokens=*。

      其次,在set /p后仅判断了%id%和%sid%是否为空,而未判断是否为其它无效值,很容易导致bootcfg操作失败;

      再次,在Copy %BTINI% %BTBAK%之前未打开boot.ini的系统隐藏属性,导致备份失败;而修改完boot.ini后,又未恢复其属性。

      最后,在我的boot.ini中,[operating systems]在[boot loader]之上,而程序无法插入启动项目到其间,导致缺省项目指定出现错误。

[ 本帖最后由 willsort 于 2006-6-10 08:31 PM 编辑 ]
回复

使用道具 举报

12#
发表于 2006-6-10 20:54:04 | 只看该作者
原帖由 willsort 于 2006-6-10 20:18 发表
Re 老毛桃:

      兄在中国DOS联盟论坛发的主题已经有回复了。

      下载了你的提供的 cgboot.exe ,在首次的测试中,有意分别使用了a和b应答提问,结果操作结果错误,并且没有发现备份。

      因为是 ...

感谢 Will 兄在 DOS 联盟的回复。老毛桃由于以前没有怎么去过 DOS 联盟,所以,呵呵,不好意思,发完帖子就闪人了,望 Will 兄不要见外。

现在一一回答你的疑问。

将批处理打包,是因为老毛桃怕发帖子求助的那位朋友误修改操作错误,现在想来,呵呵,这样的担心是多余了。

备份?Sorry,我测试的时候没有留意文件的隐藏属性,将 ATTRIB -s -h -r %BTINI%Copy %BTINI% %BTBAK% 两句写反了,如果因为没能备份给 Will 兄带来麻烦,老毛桃表示歉意。

对于判断输入数值是否为空和是否为数值的问题,我其实是想到了,只是觉得一般不会出现错误输入的情况,而且只是提供给楼主使用,并不是作为一个专用工具提供给大家,因此没有考虑那么多。

至于说修改完 BOOT.INI 不恢复其原本的只读、系统属性的疑问,Will 兄可能没有注意到,BOOTCFG 命令执行完毕会自动将 BOOT.INI 的只读属性设置好的,所以老毛桃免去了恢复属性的命令行。

对于 delims=; 这个问题,不怕 Will 兄笑话,老毛桃对于For 语句的使用知识一知半解,这里只是觉者在自己的机器上测试没出现问题,所以就。。。

看到了 Will 兄在 DOS 联盟的回复的代码,简洁高效,老毛桃不得不佩服。呵呵以后 DOS 方面的知识老毛桃就认准向 Will 兄学习了!

[ 本帖最后由 老毛桃 于 2006-6-10 08:56 PM 编辑 ]
回复

使用道具 举报

13#
发表于 2006-6-10 21:11:40 | 只看该作者
TO:楼主

这是 WillSort 兄在 DOS 联盟给我的回复
  1. @echo off
  2. if exist boot.new del boot.new
  3. if not exist boot.ini goto :eof
  4. for /f "delims=" %%l in (boot.ini) do (
  5.     echo.%%l | find/i "/fastdetect">nul && echo %%l /kernel=kernel.exe||echo %%l
  6. )>>boot.new
  7. attrib -s -h -r boot.ini
  8. copy boot.new boot.ini>nul
  9. attrib +s +h +r boot.ini
复制代码

我试过了,代码简洁高效,执行得很好。

另外请教一下 WillSort 兄,如果现在的系统菜单项的开关已经有了 /kernel=kernel.exe,怎么处理呢?还望 Will 兄回复。

在这方面,老毛桃一点都不在行,先谢谢了!
回复

使用道具 举报

14#
发表于 2006-6-10 21:45:43 | 只看该作者
Re 老毛桃:

     我只是一名批处理的爱好者而已,兄缪赞了!boot.ini我预先做了备份,所以并无损失,承兄挂念。

     对于避免重复修改的问题,再加一个反向的find应该就可以了。代码如下,如果还有其他的指正或需求,欢迎继续指出。也欢迎兄多到cndos大家交流经验。


  1. @echo off
  2. if exist boot.new del boot.new
  3. if not exist boot.ini goto :eof
  4. for /f "delims=" %%l in (boot.ini) do (
  5.     echo.%%l | find /i "/fastdetect" | find /v /i "/kernel">nul && echo %%l /kernel=kernel.exe||echo %%l
  6. )>>boot.new
  7. attrib -s -h -r boot.ini
  8. copy boot.new boot.ini>nul
  9. attrib +s +h +r boot.ini
复制代码

[ 本帖最后由 willsort 于 2006-6-10 09:48 PM 编辑 ]
回复

使用道具 举报

15#
发表于 2006-6-10 22:44:27 | 只看该作者
原帖由 willsort 于 2006-6-10 21:45 发表
Re 老毛桃:

     我只是一名批处理的爱好者而已,兄缪赞了!boot.ini我预先做了备份,所以并无损失,承兄挂念。

     对于避免重复修改的问题,再加一个反向的find应该就可以了。代码如下,如果还有其他的指 ...

呵呵,这下应该算是比较完美了,避免了我的批处理中人工判断默认启动菜单项的位置和菜单项条目数的问题,出错几率大大降低,感谢 WillSort 兄。
回复

使用道具 举报

16#
 楼主| 发表于 2006-6-11 21:56:59 | 只看该作者
感谢老毛桃和willsort ,用了willsort 兄的命令后,在启动项后加了/kernel=kernel.exe,命令里面的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
不大理解,它能自动确认当前系统的启动行吗?如果启动项没有"/fastdetect,可能就不能添加/kernel=kernel.exe了,能否把它做成大家都可以用的!
回复

使用道具 举报

17#
发表于 2006-6-12 13:01:59 | 只看该作者
果然是强人,厉害
回复

使用道具 举报

18#
发表于 2006-6-14 15:25:03 | 只看该作者

前辈都在啊!

前辈都在啊!晚辈向前辈们学习了!

好好学习!天天向上!
回复

使用道具 举报

19#
发表于 2006-11-15 13:40:23 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

20#
发表于 2006-11-16 01:28:22 | 只看该作者
原帖由 fzfchao 于 2006-6-11 09:56 PM 发表
感谢老毛桃和willsort ,用了willsort 兄的命令后,在启动项后加了/kernel=kernel.exe,命令里面的for /f "delims=" %%l in (boot.ini) do (
    echo.%%l | find /i "/fastdetect" | find  ...


我不懂批处理,不过,照猫画虎,改为下面的就可以了

"partition(2)\WINDOWS=" 代表第二分区安装有XP,这样,如果是多系统的话,可以选择分区,否则的话,他会在每个启动项上都加 /kernel=kernel.exe,这显然不符合要求(当然,需要加上选择判断)

@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
回复

使用道具 举报

21#
发表于 2006-11-16 09:58:05 | 只看该作者
老毛桃 版主  :


有没有纯DOS下的处理方案啊?(C:FAT32件系统。)
                                                               
                                                                                谢谢!
回复

使用道具 举报

22#
发表于 2006-11-16 10:37:50 | 只看该作者
  纯DOS下的纯批处理是无法办到的,因为用到了 for 语句中的 /f,除非借助第三方软件。
回复

使用道具 举报

23#
发表于 2006-11-16 15:55:32 | 只看该作者
namejm 大侠:
     能否指点一二?
                                                                           谢谢!
回复

使用道具 举报

24#
发表于 2006-11-16 21:39:28 | 只看该作者
  我对纯DOS下的批处理十分陌生,暂时不能帮上你什么忙。
回复

使用道具 举报

25#
发表于 2006-11-17 12:26:03 | 只看该作者
纯 DOS 的 For 功能极其有限,不借助第三方软件,恐怕很难办得到
回复

使用道具 举报

26#
发表于 2006-11-17 13:12:16 | 只看该作者
原帖由 wang6610 于 2006-11-16 09:58 AM 发表
老毛桃 版主  :


有没有纯DOS下的处理方案啊?(C:FAT32件系统。)
                                                               
                                                               ...



可以用“INIFILE.com”第三方程序!
回复

使用道具 举报

27#
发表于 2007-8-2 14:49:29 | 只看该作者
又 学 了 一 招 !
回复

使用道具 举报

28#
发表于 2007-8-4 10:36:47 | 只看该作者
威望低~無法下載~謝謝你
回复

使用道具 举报

29#
发表于 2007-8-7 10:32:13 | 只看该作者
晚辈向前辈们学习了!
回复

使用道具 举报

30#
发表于 2007-8-7 10:37:05 | 只看该作者
你需要先去掉 BOOT.INI 的只读属性。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-9-24 19:24

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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