|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
『楼 主』:
如何取得字符行号和指定行号的字符【已解决】
如何取得指定字符所在的行号及指定行号的字符。
如何从格式如下的文本文件中获取grldr.mbr项的ID号,即本例的“{62fe0a1a-3eb3-11dc-9284-00e04c75ef59}”。
说明,1,此ID号字符不是固定的,但格式不变。
2,grldr.mbr项不一定是最后一个项目。
个人思路,首先确定grldr.mbr项所在行,减2行,得到ID号所在行。然后处理字符。
就是不知道如何取得ID号所在行。
谢谢。
Windows Boot Manager
--------------------
identifier {bootmgr}
device unknown
description Windows Boot Manager
locale zh-CN
inherit {globalsettings}
default {default}
displayorder {default}
{62fe0a1a-3eb3-11dc-9284-00e04c75ef59}
toolsdisplayorder {memdiag}
timeout 5
Windows Boot Loader
-------------------
identifier {default}
device unknown
path \Windows\system32\winload.exe
description Windows Vista (TM) Ultimate (已恢复)
osdevice unknown
systemroot \Windows
resumeobject {72e1ad73-cc8f-11db-aef5-806e6f6e6963}
Real-mode Boot Sector
---------------------
identifier {62fe0a1a-3eb3-11dc-9284-00e04c75ef59}
device boot
path \grldr.mbr
description Grub 4 dos
[ Last edited by lianjiang2004 on 2007-7-31 at 06:29 PM ]
|
Windows 一键还原
http://www.yjhy.com |
|
2007-7-31 00:12 |
|
|
bjsh
银牌会员
积分 2000
发帖 621
注册 2007-1-1
状态 离线
|
『第
2 楼』:
提示:findstr /n .* 可以获取行号。
|
|
2007-7-31 00:15 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
|
2007-7-31 08:13 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
4 楼』:
identifier是否除了ID就是{bootmgr} ,{default}?
那就简单多了……
2次findstr
第一次过滤有identifier的行
第二次过滤没有{bootmgr},{default}的行
硬是要上面的方法也不是不可以……麻烦点。
注意到有个ID,但是前面没有说明词,数了下是24个空格,所以:
findstr /c:" " 1.txt
pause
你的文本比较少不知道是不是都这样……
lianjiang这个ID见过嗬,你写过几个修改grldr的帖子,看着改了些东西嗬。
[ Last edited by slore on 2007-7-31 at 09:37 AM ]
|
|
2007-7-31 09:29 |
|
|
bjsh
银牌会员
积分 2000
发帖 621
注册 2007-1-1
状态 离线
|
『第
5 楼』:
请说说此ID行相对于其它行而言,独一无二的特征,不说清楚的话,代码很难写。
|
|
2007-7-31 09:45 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
『第
6 楼』:
能确定的特征就是位于grldr.mbr所在行的前两行。是否还有其它特征,目前不清楚。
问题缘由:
我写了个向vista启动项中添加grub4dos的批处理,现在想写个自动卸载的批处理,因此想要获得grub4dos项的id号,以便卸载。
现在使用的卸载方法是利用安装时保存的id号,问题是假如这个临时文件被删掉的话,卸载就麻烦些了,需手动输入id号。
也许有其他简便方法。我再看看bcdedit的帮助。
|
Windows 一键还原
http://www.yjhy.com |
|
2007-7-31 10:35 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
『第
7 楼』:
我没写过修改grldr的帖子,写过一个grub4dos初级教程。
卸载批处理内容也想加到初级教程中,这样内容就完整些了。
|
Windows 一键还原
http://www.yjhy.com |
|
2007-7-31 10:38 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
『第
8 楼』:
Quote: | Originally posted by slore at 2007-7-31 09:29:
identifier是否除了ID就是{bootmgr} ,{default}?
那就简单多了……
|
|
这个应不能确定,现在除了默认vista项,就是grub4dos项,假如增加了其它项的话,应该出现类似的项目。
试着随便增加了一项NTLDR-2。麻烦各位看看。
-----------------------------------------------
Windows Boot Manager
--------------------
identifier {bootmgr}
device unknown
description Windows Boot Manager
locale zh-CN
inherit {globalsettings}
default {default}
displayorder {default}
{62fe0a1a-3eb3-11dc-9284-00e04c75ef59}
{af700c0c-3f0f-11dc-9285-00e04c75ef59}
toolsdisplayorder {memdiag}
timeout 5
Windows Boot Loader
-------------------
identifier {default}
device unknown
path \Windows\system32\winload.exe
description Windows Vista (TM) Ultimate (已恢复)
osdevice unknown
systemroot \Windows
resumeobject {72e1ad73-cc8f-11db-aef5-806e6f6e6963}
Real-mode Boot Sector
---------------------
identifier {62fe0a1a-3eb3-11dc-9284-00e04c75ef59}
device boot
path \grldr.mbr
description Grub 4 dos
Real-mode Boot Sector
---------------------
identifier {af700c0c-3f0f-11dc-9285-00e04c75ef59}
device boot
path \ntldr
description NTLDR-2
|
Windows 一键还原
http://www.yjhy.com |
|
2007-7-31 10:51 |
|
|
qzwqzw
银牌会员
天的白色影子
积分 2342
发帖 635
注册 2004-3-6
状态 离线
|
『第
9 楼』:
你的目的如果能用专有工具还是用专有工具好些
没有必要把很多事情都交给批处理
如果实在没有办法的话
再用批处理
从你的描述上来看
你是想删除菜单中的grub4dos
那你只要将Grub 4 dos段所在的6行删除就可以了
(或者还需要处理别的东西)
这方法就很多了
可以先缓存六行文本到一个队列中
然后判断最新的行文本中是否包含grub4dos字段
如果有那么将队列清空
否则将队列更新
并将队列里退出的文本写到新的菜单文件中
最后将队列全部转移到新菜单中即可
或者采用定位的办法
先确定grub4dos的行号
再-5得到grub段首行的行号
然后用for+more根据段首尾行号过滤文本即可
|
|
2007-7-31 11:22 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
『第
10 楼』:
下面是我用的笨办法取得的grldr.mbr项目的id号。请指教。
思路:
1,生成vista启动项目临时文件bcdtemp.txt,格式如上面的帖子。
2,取得grldr.mbr项目的行号。
3,减去3行得id号前一行号。
4,取得id号所在行的字符,处理后得到id号。
-----------------------------------------
@echo off
bcdedit >bcdtemp.txt
findstr /n grldr.mbr bcdtemp.txt>nnn.txt
for,/f,"tokens=1 delims=:",%%i,In (nnn.txt) Do (
set nnn=%%i
)
echo nnn is %nnn%.
set /a nnn2=%nnn%-3
echo nnn2 is %nnn2%.
setlocal EnableDelayedExpansion
for,/f,"skip=%nnn2% tokens=2",%%i,In (bcdtemp.txt) Do (
set vid=%%i
if not !vid!.==. echo vid is !vid!.&&pause&&echo !vid!>vidn.ini&&goto :exit
)
:exit
|
Windows 一键还原
http://www.yjhy.com |
|
2007-7-31 11:23 |
|
|
qzwqzw
银牌会员
天的白色影子
积分 2342
发帖 635
注册 2004-3-6
状态 离线
|
『第
11 楼』:
看来你还是想获取ID号
我不知道这样有什么好处
不知既然你这样定了
那我不再过多干涉
这个算法上应该没有什么问题
另外,关于ID的存储位置
不知道Vista下有没有类似boot.ini的支持注释的文本形式的系统文件
这样以注释形式将grub4dos的id号写在这个文本中
既便于提取,又不会轻易被删除
|
|
2007-7-31 11:42 |
|
|
Runas
初级用户
积分 74
发帖 38
注册 2007-7-25
状态 离线
|
|
2007-7-31 11:45 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
『第
13 楼』:
Quote: | Originally posted by qzwqzw at 2007-7-31 11:22:
你的目的如果能用专有工具还是用专有工具好些
没有必要把很多事情都交给批处理
如果实在没有办法的话
再用批处理
从你的描述上来看
你是 ... |
|
用删除行的方法是不行的,上面给出的文本,是导出的vista启动项,而并非vista启动文件本身,因此编辑这个文件是没用的。
通过批处理获取id号后,再根据vista菜单编辑的要求进行处理。
之所以考虑用批处理,是由于vista的启动项编辑比xp下编辑boot.ini要麻烦,用vista自带工具编辑,需要手动输入多次上面所示的随机产生的形如“{62fe0a1a-3eb3-11dc-9284-00e04c75ef59}”的id号,很麻烦。用批处理,能解决安装与卸载问题。
特别是在使用基于grub4dos和ghost的系统备份工具时,不能自动处理,将会很麻烦。
|
Windows 一键还原
http://www.yjhy.com |
|
2007-7-31 12:21 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
14 楼』:
@echo off
for /f "tokens=1 delims=:" %%i In ('findstr /n grldr.mbr bcdtemp.txt') Do (
Set nnn=%%i
)
set /a nnn=%nnn%-2
findstr /n identifier bcdtemp.txt>temp.txt
for /f "tokens=2" %%i In ('findstr /n %nnn%:identifier temp.txt') Do (
echo %%i
)
pause
|
|
2007-7-31 12:41 |
|
|
lianjiang2004
金牌会员
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
|
2007-7-31 14:17 |
|