无忧启动论坛

标题: 求一批处理! [打印本页]

作者: fnlwg    时间: 2006-11-28 15:36
标题: 求一批处理!
自动检测C:\BOOT.INI文件中有无“C:\GHLDR=DOS启动”这一行,有则跳过,无则增加,谢谢!我的操作系统是WINXP PRO SP2
作者: fage520    时间: 2006-11-28 16:43
有则跳过
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启动这句??
作者: namejm    时间: 2006-11-28 18:05
  find "DOS启动" 语句并不能保证准确无误,要想精确匹配的话,还是需要用 findstr 来做。不知道“C:\GHLDR=DOS启动”是否独占一行,其下是否还有其他语句?
作者: xypcmac    时间: 2006-11-28 20:05
当然是独占一行的...
至于下面是否有其它语句应该取决于操作者...

类似的帖子好像不少啊!搜索一下大概可以找到答案!
作者: xypcmac    时间: 2006-11-28 20:43
原帖由 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
作者: fage520    时间: 2006-11-28 23:01
有没有更直接的方法?
作者: fage520    时间: 2006-11-29 00:08
原帖由 namejm 于 2006-11-28 06:05 PM 发表
  find "DOS启动" 语句并不能保证准确无误,要想精确匹配的话,还是需要用 findstr 来做。不知道“C:\GHLDR=DOS启动”是否独占一行,其下是否还有其他语句?



我正困扰呢?  有时会产生空行,用 findstr 更精确?
那如何写呢?我对findstr不熟,请指教!!
先谢了!!
作者: fnlwg    时间: 2006-11-29 09:03
谢谢各位高人解答,非常感谢!
作者: 6618    时间: 2006-11-29 16:40
原帖由 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


你所说的方法并不可行,你自己把这个存成批处理试试就知道了。
作者: 6618    时间: 2006-11-29 22:27
把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


作者: namejm    时间: 2006-11-29 22:28
  假设 "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 编辑 ]
作者: fage520    时间: 2006-11-29 23:25
原帖由 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 编辑 ]
作者: 6618    时间: 2006-11-29 23:31
不错,学习一下。
作者: namejm    时间: 2006-11-29 23:39
  在11F的第一段代码中插入一句 echo.>>tmp1 后,已解决12F所说的问题,请测试。
作者: fage520    时间: 2006-11-30 08:12
测试成功,无限感谢!!
作者: fnlwg    时间: 2006-11-30 09:47
感谢各位达人,学到不少知识!
作者: fnlwg    时间: 2007-8-10 12:07
如果添加的字符是C:\GHLDR=“DOS启动”,请问该如何解决?




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3