无忧启动论坛

标题: 请教高手,怎么回避 DOS 命令参数中的空格问题(基本解决) [打印本页]

作者: 老毛桃    时间: 2006-6-7 14:48
标题: 请教高手,怎么回避 DOS 命令参数中的空格问题(基本解决)
是这样的,昨天有人发帖子,要求替换/修改 BOOT.INI 中的部分内容,用批处理实现。

就是要求在系统菜单的选项后面,添加上红线框框中的内容。



我尝试了半天,通过 findstr 获取到了那一行数据,并且 findstr 输出的结果正确。
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

但是,如何写到 boot.ini 中去呢?我尝试了用 ECHO 查看结果,但好像写到空格处就断了,我知道命令解释器将空格后面的内容当成了 ECHO 的第二个变量了。想问高手,如何避免这一点,更为棘手的是,这一行内容原本就含有了引号,如果再加一对引号岂不会乱套?

这是我用来获取菜单信息的语句,想通过后面的 DO,写入到 BOOT.INI 中,先用 ECHO 查看,没有想到会出这样的问题。
for /f %i in ('findstr "fastdetect" boot.ini') do echo %i

输出结果为
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft

要如何才能避免受到空格的干扰呢?

这是那个帖子,我还没有搞定它,请各位高手相助,老毛桃先谢谢了!
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=77775

[ 本帖最后由 老毛桃 于 2006-6-7 11:54 PM 编辑 ]
作者: 老毛桃    时间: 2006-6-7 20:59
没有人搞定吗?期待高手 ing

此帖先高亮,等待一下。
作者: 小军军    时间: 2006-6-7 21:33
不能用外部命令吗?
作者: 老毛桃    时间: 2006-6-7 21:46
只要是跟批处理结合的,有好方法尽管分享。会给于一定的积分奖励
作者: 小军军    时间: 2006-6-7 21:51
1. 只在原有的fastdetect后加kernel=... 其他均原封不动吗?
如果是这样,用外部命令的话,小菜抛砖引玉,就用change.exe一句:
change /i boot.ini "fastdetect" "kernel=kernel.exe"

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

CHANGE.rar

13.21 KB, 下载次数: 408, 下载积分: 无忧币 -2


作者: 老毛桃    时间: 2006-6-7 22:38
原帖由 小军军 于 2006-6-7 21:51 发表
1. 只在原有的fastdetect后加kernel=... 其他均原封不动吗?
如果是这样,用外部命令的话,小菜抛砖引玉,就用change.exe一句:
change /i boot.ini "fastdetect" "kernel=kernel.exe"

感谢提供简单的方法,可惜你的上传文件有问题,请重新上传,谢谢!

Snap1.jpg (11.6 KB, 下载次数: 107)

Snap1.jpg

作者: 小军军    时间: 2006-6-7 22:42
毛哥哥呀,传不了EXE,改了名的呀,忘了说明了;抱歉
作者: 老毛桃    时间: 2006-6-7 22:57
原帖由 小军军 于 2006-6-7 22:42 发表
毛哥哥呀,传不了EXE,改了名的呀,忘了说明了;抱歉

哈哈,搞定了,谢谢。

履行承诺,奖励!

我刚才尝试了 BOOTCFG,好像也不太好使,谢谢!帮了我的忙了!

PS:你的上传我已经修改了,压缩成了 RAR 格式

[ 本帖最后由 老毛桃 于 2006-6-7 11:03 PM 编辑 ]
作者: 老毛桃    时间: 2006-6-7 23:08
原帖由 小军军 于 2006-6-7 21:51 发表
1. 只在原有的fastdetect后加kernel=... 其他均原封不动吗?
如果是这样,用外部命令的话,小菜抛砖引玉,就用change.exe一句:
change /i boot.ini "fastdetect" "kernel=kernel.exe"

命令行好像应该这么写才对
change /i boot.ini "/fastdetect" "/fastdetect /kernel=kernel.exe"

否则的话,/fastdetect 着一个开关就丢失了
作者: 小军军    时间: 2006-6-7 23:20
原帖由 老毛桃 于 2006-6-7 11:08 PM 发表

命令行好像应该这么写才对
change /i boot.ini "/fastdetect" "/fastdetect /kernel=kernel.exe"

否则的话,/fastdetect 着一个开关就丢失了

对,那是俺搞忙了,把fastdetect给替换了,呵呵,用外部命令就很简单,还有像lmod,killline也能实现;用NT的for我只能取出/fastdetect给一个变量,但替换它还在琢磨...

[ 本帖最后由 小军军 于 2006-6-7 11:27 PM 编辑 ]
作者: 老毛桃    时间: 2006-6-7 23:38
原帖由 小军军 于 2006-6-7 23:20 发表

对,那是俺搞忙了,把fastdetect给替换了,呵呵,用外部命令就很简单,还有像lmod,killline也能实现;用NT的for我只能取出/fastdetect给一个变量,但替换它还在琢磨...http://photo2.hexun.com/p/2006/0511/2 ...

是的,用 For 搞不定,到了空格就没招了
作者: 小军军    时间: 2006-6-8 00:33
毛哥哥楼顶的ECHO问题,要含空格,echo 可以完整的把那行给显示出来,但最后一行我无法跳过,一跳就把 multi(0)... 那行也跳没了...

for /f "skip=2 skip=3 skip=4 tokens=5,1* delims= "  %a in (boot.ini) do @echo %a %b %c

将整行内容传送到变量就因为跳不过它,for 赋予了最后一行 c:\grldr...

[ 本帖最后由 小军军 于 2006-6-8 12:37 AM 编辑 ]
作者: 老毛桃    时间: 2006-6-8 01:21
原帖由 小军军 于 2006-6-8 00:33 发表
毛哥哥楼顶的ECHO问题,要含空格,echo 可以完整的把那行给显示出来,但最后一行我无法跳过,一跳就把 multi(0)... 那行也跳没了...

for /f "skip=2 skip=3 skip=4 tokens=5,1* delims= "  %a in (b ...

试试将 delims= " 中间的空格去掉

for /f "skip=2 skip=3 skip=4 tokens=5,1* delims="  %a in (boot.ini) do @echo %a %b %c
作者: 小军军    时间: 2006-6-8 01:27
还是有啊
D:\Documents and Settings\coucong\桌面\新建文件夹>for /f "skip=2 skip=3 skip=4 tokens=5,1* delims="  %a in (boot.ini) do @echo %a %b %c

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
C:\grldr=我的DOS工具箱

[ 本帖最后由 小军军 于 2006-6-8 11:50 PM 编辑 ]
作者: 老毛桃    时间: 2006-6-8 01:47
原帖由 小军军 于 2006-6-8 01:27 发表
还是有啊
D:\Documents and Settings\coucong\桌面\新建文件夹>for /f "skip=2 skip=3 skip=4 tokens=5,1* delims="  %a in (boot.ini) do @echo %a %b %c
multi(0)disk(0)rdisk(0)partition(1)\W ...

呵呵,我也不是很懂了,这得问问高手是怎么解决的
作者: pcs2006    时间: 2006-6-8 20:01
路過的..
略過空白好像是 delims=;
我的結果..

C:\>FOR /F "delims=;" %i IN (boot.ini) DO @echo %i

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(4)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(4)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=OptIn
作者: 老毛桃    时间: 2006-6-8 22:49
原帖由 pcs2006 于 2006-6-8 20:01 发表
路過的..
略過空白好像是 delims=;
我的結果..

C:\>FOR /F "delims=;" %i IN (boot.ini) DO @echo %i


timeout=30
default=multi(0)disk(0)rdisk(0)partition(4)\WINDOWS

multi(0)disk ...

呵呵,不错,这样就可以找到 Windows 项目所在的整行内容了

For /f "delims=;" %i In ('findstr "fastdetect" c:\boot.ini') do @echo %i




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