无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6588|回复: 16
打印 上一主题 下一主题

求一批处理!

[复制链接]
跳转到指定楼层
1#
发表于 2006-11-28 15:36:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自动检测C:\BOOT.INI文件中有无“C:\GHLDR=DOS启动”这一行,有则跳过,无则增加,谢谢!我的操作系统是WINXP PRO SP2
2#
发表于 2006-11-28 16:43:05 | 只看该作者
有则跳过
attrib -s -h -r C:\boot.ini
type C:\Boot.ini|find "DOS启动"
if "%ERRORLEVEL%"=="0" goto ......


无则增加
attrib -s -h -r C:\boot.in
echo.>>C:\boot.ini
echo c:\grldr="DOS启动" >>C:\boot.ini
attrib +s +h +r C:\boot.ini
goto ......

我想知道卸载时如何删除boot.ini的C:\GHLDR=DOS启动这句??

评分

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

查看全部评分

回复

使用道具 举报

3#
发表于 2006-11-28 18:05:38 | 只看该作者
  find "DOS启动" 语句并不能保证准确无误,要想精确匹配的话,还是需要用 findstr 来做。不知道“C:\GHLDR=DOS启动”是否独占一行,其下是否还有其他语句?
回复

使用道具 举报

4#
发表于 2006-11-28 20:05:23 | 只看该作者
当然是独占一行的...
至于下面是否有其它语句应该取决于操作者...

类似的帖子好像不少啊!搜索一下大概可以找到答案!
回复

使用道具 举报

5#
发表于 2006-11-28 20:43:25 | 只看该作者
原帖由 fage520 于 2006-11-28 04:43 PM 发表
有则跳过
attrib -s -h -r C:\boot.ini
type C:\Boot.ini|find "DOS启动"
if "%ERRORLEVEL%"=="0" goto ......


无则增加
attrib -s -h -r C:\boot.in
echo.>>C:\b ...


你上面的修改有时会产生空行(当原文件的输入光标在下面一行的时候)...

至于删除某行可以这样的笨办法:
attrib -r -h -s %systemdrive%\boot.ini
ren %systemdrive%\boot.ini %systemdrive%\boot.bak
findstr /v "c:\grldr="DOS启动"" %systemdrive%\boot.bak>>c:\boot.ini
attrib +r +h +s systemdrive%\boot.ini
回复

使用道具 举报

6#
发表于 2006-11-28 23:01:53 | 只看该作者
有没有更直接的方法?
回复

使用道具 举报

7#
发表于 2006-11-29 00:08:16 | 只看该作者
原帖由 namejm 于 2006-11-28 06:05 PM 发表
  find "DOS启动" 语句并不能保证准确无误,要想精确匹配的话,还是需要用 findstr 来做。不知道“C:\GHLDR=DOS启动”是否独占一行,其下是否还有其他语句?



我正困扰呢?  有时会产生空行,用 findstr 更精确?
那如何写呢?我对findstr不熟,请指教!!
先谢了!!
回复

使用道具 举报

8#
 楼主| 发表于 2006-11-29 09:03:42 | 只看该作者
谢谢各位高人解答,非常感谢!
回复

使用道具 举报

9#
发表于 2006-11-29 16:40:32 | 只看该作者
原帖由 xypcmac 于 2006-11-28 08:43 PM 发表


你上面的修改有时会产生空行(当原文件的输入光标在下面一行的时候)...

至于删除某行可以这样的笨办法:
至于删除某行可以这样的笨办法:
attrib -r -h -s %systemdrive%\boot.ini
ren %systemdrive%\boot.ini %systemdrive%\boot.bak
findstr /v "c:\grldr="DOS启动"" %systemdrive%\boot.bak>>c:\boot.ini
attrib +r +h +s systemdrive%\boot.ini


你所说的方法并不可行,你自己把这个存成批处理试试就知道了。
回复

使用道具 举报

10#
发表于 2006-11-29 22:27:04 | 只看该作者
把fage520朋友的说的整理一下,下面的批处理基本上可以完成1楼所说的要完成的任务:
@echo off
type C:\Boot.ini|find "DOS启动">nul
if "%ERRORLEVEL%"=="0" goto end

attrib -s -h -r C:\boot.ini
echo.>>C:\boot.ini
echo c:\grldr="DOS启动" >>C:\boot.ini
attrib +s +h +r C:\boot.ini
echo.
echo.
echo    已在boot.ini中加入了c:\grldr="DOS启动"这一项。
pause>nul
exit

:end
echo.
echo.
echo     boot.ini已存在C:\GHLDR="DOS启动",按任键意退出。
pause>nul

[ 本帖最后由 6618 于 2006-11-30 05:15 AM 编辑 ]

添加“DOS启动”.rar

369 Bytes, 下载次数: 61, 下载积分: 无忧币 -2

回复

使用道具 举报

11#
发表于 2006-11-29 22:28:36 | 只看该作者
  假设 "C:\GHLDR=DOS启动"这个字符串后还有内容,则用 find 处理会出错。可以使用如下代码(添加的时候不会产生空行):

  1. @echo off
  2. :: 添加 C:\GHLDR=DOS启动
  3. findstr /b /e /i /c:"C:\GHLDR=DOS启动" c:\boot.ini>nul||(
  4.     attrib -h -r -s c:\boot.ini
  5.     del /a /f /q c:\boot.bak 2>nul
  6.     copy c:\boot.ini c:\boot.bak>nul
  7.     attrib +h +r +s c:\boot.bak
  8.     move c:\boot.ini tmp1>nul
  9.     echo.>>tmp1
  10.     echo C:\GHLDR=DOS启动>>tmp1
  11.     for /f "delims=" %%j in (tmp1) do >>tmp2 echo %%j
  12.     move tmp2 c:\boot.ini
  13.     attrib +h +r +s c:\boot.ini
  14.     del /q tmp1
  15. )
  16. start c:\boot.ini
复制代码

  1. @echo off
  2. :: 删除 C:\GHLDR=DOS启动
  3. findstr /b /e /i /c:"C:\GHLDR=DOS启动" c:\boot.ini>nul&&(
  4.     attrib -h -r -s c:\boot.ini
  5.     del /a /f /q c:\boot.bak 2>nul
  6.     copy c:\boot.ini c:\boot.bak>nul
  7.     attrib +h +r +s c:\boot.bak
  8.     move c:\boot.ini tmp1>nul
  9.     echo.>>tmp1
  10.     >tmp2 findstr /b /e /v /c:"C:\GHLDR=DOS启动" tmp1
  11.     move tmp2 c:\boot.ini
  12.     attrib +h +r +s c:\boot.ini
  13.     del /q tmp1
  14. )
  15. start c:\boot.ini
复制代码

[ 本帖最后由 namejm 于 2006-11-29 11:38 PM 编辑 ]

评分

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

查看全部评分

回复

使用道具 举报

12#
发表于 2006-11-29 23:25:37 | 只看该作者
原帖由 namejm 于 2006-11-29 10:28 PM 发表
  假设 "C:\GHLDR=DOS启动"这个字符串后还有内容,则用 find 处理会出错。可以使用如下代码(添加的时候不会产生空行):

@echo off
:: 添加 C:\GHLDR=DOS启动
findstr /b /e /i /c:"C:\GHLD ...



谢谢namejm朋友指点!!确实不会产生空行。

又发现新问题,如果光标在
[boot loader]
timeout=2
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP" /fastdetect|
而后面已没有空行的话,会变成
[boot loader]
timeout=2
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP" /fastdetectC:\GHLDR=DOS启动
而且这种情况你那个批处理也不能删除。

[ 本帖最后由 fage520 于 2006-11-29 11:41 PM 编辑 ]
回复

使用道具 举报

13#
发表于 2006-11-29 23:31:10 | 只看该作者
不错,学习一下。
回复

使用道具 举报

14#
发表于 2006-11-29 23:39:35 | 只看该作者
  在11F的第一段代码中插入一句 echo.>>tmp1 后,已解决12F所说的问题,请测试。
回复

使用道具 举报

15#
发表于 2006-11-30 08:12:24 | 只看该作者
测试成功,无限感谢!!
回复

使用道具 举报

16#
 楼主| 发表于 2006-11-30 09:47:08 | 只看该作者
感谢各位达人,学到不少知识!
回复

使用道具 举报

17#
 楼主| 发表于 2007-8-10 12:07:53 | 只看该作者
如果添加的字符是C:\GHLDR=“DOS启动”,请问该如何解决?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-24 21:36

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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