无忧启动论坛

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

请教高手,怎么回避 DOS 命令参数中的空格问题(基本解决)

[复制链接]
跳转到指定楼层
1#
发表于 2006-6-7 14:48:49 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
是这样的,昨天有人发帖子,要求替换/修改 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 编辑 ]
17#
 楼主| 发表于 2006-6-8 22:49:23 | 只看该作者
原帖由 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
回复

使用道具 举报

16#
发表于 2006-6-8 20:01:50 | 只看该作者
路過的..
略過空白好像是 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
回复

使用道具 举报

15#
 楼主| 发表于 2006-6-8 01:47:43 | 只看该作者
原帖由 小军军 于 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 ...

呵呵,我也不是很懂了,这得问问高手是怎么解决的
回复

使用道具 举报

14#
发表于 2006-6-8 01:27: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 编辑 ]
回复

使用道具 举报

13#
 楼主| 发表于 2006-6-8 01:21:14 | 只看该作者
原帖由 小军军 于 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
回复

使用道具 举报

12#
发表于 2006-6-8 00:33:43 | 只看该作者
毛哥哥楼顶的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 编辑 ]
回复

使用道具 举报

11#
 楼主| 发表于 2006-6-7 23:38:12 | 只看该作者
原帖由 小军军 于 2006-6-7 23:20 发表

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

是的,用 For 搞不定,到了空格就没招了
回复

使用道具 举报

10#
发表于 2006-6-7 23:20:16 | 只看该作者
原帖由 老毛桃 于 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 编辑 ]
回复

使用道具 举报

9#
 楼主| 发表于 2006-6-7 23:08:38 | 只看该作者
原帖由 小军军 于 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 着一个开关就丢失了
回复

使用道具 举报

8#
 楼主| 发表于 2006-6-7 22:57:34 | 只看该作者
原帖由 小军军 于 2006-6-7 22:42 发表
毛哥哥呀,传不了EXE,改了名的呀,忘了说明了;抱歉

哈哈,搞定了,谢谢。

履行承诺,奖励!

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

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

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

使用道具 举报

7#
发表于 2006-6-7 22:42:04 | 只看该作者
毛哥哥呀,传不了EXE,改了名的呀,忘了说明了;抱歉
回复

使用道具 举报

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

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

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

Snap1.jpg
回复

使用道具 举报

5#
发表于 2006-6-7 21:51:50 | 只看该作者
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

评分

参与人数 1无忧币 +10 收起 理由
老毛桃 + 10 我很赞同

查看全部评分

回复

使用道具 举报

4#
 楼主| 发表于 2006-6-7 21:46:56 | 只看该作者
只要是跟批处理结合的,有好方法尽管分享。会给于一定的积分奖励
回复

使用道具 举报

3#
发表于 2006-6-7 21:33:58 | 只看该作者
不能用外部命令吗?
回复

使用道具 举报

2#
 楼主| 发表于 2006-6-7 20:59:22 | 只看该作者
没有人搞定吗?期待高手 ing

此帖先高亮,等待一下。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

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

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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