![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-23 14:41 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,273 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » (已结)为何我使用find /v 后得到了相反的结果? |
| 可打印版本 2,240 / 10 |
| 第1楼 sglxy | 发表于 2005-10-07 11:05 |
| 中级用户 发帖 87 积分 397 | |
|
(已结)为何我使用find /v 后得到了相反的结果? 各位老师:
我有一个tmp.txt文件,内容是: Invalid keyboard code specified C D E F G H J K L 我想在批处理a.bat中用了以下命令: echo tmp.txt|find "Invalid" /V /i> .\_tmp.txt 想去掉tmp.txt文件的第一行内容:“Invalid keyboard code specified”,结果输出到当前文件夹的_tmp.txt文件当中,可是事与愿违,得到的_tmp.txt文件内容竟然是:Invalid keyboard code specified。 后来我将a.bat的命令改为: find /v /i "Invalid"<tmp.txt > .\_tmp.txt 可是执行结果同上,这是为何?请老师们指点一下,谢谢!(我的目的是在dos下运行,现在是在winXP下进行测试的,我想Find命令在这两种系统下效果应该是相同的吧?)。 . . [ Last edited by willsort on 2005-10-11 at 00:58 ] |
|
| 第2楼 无奈何 | 发表于 2005-10-07 12:16 |
| 荣誉版主 发帖 356 积分 1,338 | |
|
你的第一条命令, echo tmp.txt| find ..... 肯定不是你要的结果,应该是 type tmp.txt| find .....
你的第二条命令,在我这里一点问题也没有,我也是winXP。 如果只是去掉文本第一行,不搜索确定位置的话,用这个命令试试 more +1 tmp.txt>_tmp.txt [ Last edited by 无奈何 on 2005-10-7 at 12:17 ] |
|
| 第3楼 sglxy | 发表于 2005-10-07 14:18 |
| 中级用户 发帖 87 积分 397 | |
Originally posted by 无奈何 at 2005-10-7 12:16 PM: 谢谢你,兄弟!我根据你的提示重新作了测试,正如你所说:第一句的echo应该是type。而且以前没有成功的原因我也找到了,原来是在我所测试的目录里还存在一个find.com !把这个find.com改名为find.co_后再运行那个批处理就OK了。 再次谢谢你的帮助! |
|
| 第4楼 willsort | 发表于 2005-10-07 16:08 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re sglxy:
“Invalid keyboard code specified”的错误提示,大多数是发生在命令行中运行16位DOS程序时。而你所提到的find.com正是这样一个程序,当在32位的CMD环境中运行时它的输出结果会比屏蔽,而只显示若干个空行,而如果将输出重定向到文件中,则会捕捉到一闪而过的“Invalid keyboard code specified”错误。因此,你的测试文件也很可能是某个16位DOS程序输出的。 这种限制的发生机理我尚未得到很好的解释,但是并不是所有的16位程序都会出现此问题,比如Debug运行后,便会将cmd调整至可接受16位程序的命令行环境,此后即使退出Debug,也仍然可以正常运行find.com等16位程序。 所以,如果在CMD的批处理中使用到了16位程序,我通常会在其前面加一行echo q|debug>nul来切换cmd状态,但此时的代码页会被调整为英文的437,所以如果需要中文的话,需要再加上一句graftabl 936来调整显示代码,而使用chcp 936是无用的,因为在任何16位程序运行时chcp代码页都会被强制切换为437。 |
|
| 第5楼 sglxy | 发表于 2005-10-08 07:28 |
| 中级用户 发帖 87 积分 397 | |
|
噢,原来是这样,谢谢老师。那么我现在是在做自己的系统恢复盘,作成后主要用在DOS纯环境下,应该不用靠滤临时生成的文本文件中会出现这个“Invalid keyboard code specified”文字吧?也就是说在DOS下运行这些文件应该不会生成这行文字,是吗?
|
|
| 第6楼 Climbing | 发表于 2005-10-08 10:18 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
Re sglxy:
是的,在纯DOS环境下不需要过滤这行字符。 Re willsort: 请问graftab是什么命令? |
|
| 第7楼 sglxy | 发表于 2005-10-08 19:30 |
| 中级用户 发帖 87 积分 397 | |
|
谢谢Climbing老师,对了,还有一个问题想向你们请教。我在http://www.cn-dos.net/forum/viewthread.php?tid=17147&fpage=1 这个帖子中曾得到willsort老师的指点,他教给我使用“locate *.gho /n /f1 /b:"set _ghofile=" > _setghof.bat”命令将gho文件加入到%_ghofile%变量中,非常实用。
但是我接着又发现一点,在生成的_setghof.bat文件中的“set _ghofile=" 字符串后面多了一个空格,_setghof.bat 内容如下: set _ghofile= F:\sysbak\IBM.GHO (注意,在”F:“之前多了个空格) 我试过了生成的变量中在”F:“之前也是多了个空格,请问这个情况是怎么回事,会不会影响ghost的运行效果? 有没有必要用CHANGE命令去掉空格? CHANGE在纯dos下是否也能用? 请willsort和Climbing老师在百忙之中指点一下,谢谢。 ... [ Last edited by sglxy on 2005-10-8 at 19:35 ] |
|
| 第8楼 JonePeng | 发表于 2005-10-08 19:59 |
| 金牌会员 发帖 1,883 积分 4,562 来自 广东广州 | |
Originally posted by sglxy at 2005-10-8 19:30: 没必要去掉空格。不影响GHOST的运行的。CHANGE是什么命令?是DOS的外部命令还是Linux的? |
|
| 第9楼 sglxy | 发表于 2005-10-08 20:42 |
| 中级用户 发帖 87 积分 397 | |
|
感谢JonePeng老兄的回答,CHANGE可以在用行命令的方式替换文本文件中的内容,使用方法是:change d:\文件夹\*.txt /from "要更换的字符段" /to "更换后的内容"。只是我一直在Winxp下使用它,就是不知道CHANGE在纯dos下是否也能用?我在以前纯dos下试了一次没成功,有哪位明白的兄弟请告知,先谢谢了!
|
|
| 第10楼 willsort | 发表于 2005-10-08 21:04 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re sglxy:
change 应该是16位的DOS程序,除非你我所接触的不是一个版本。这是我所见到的Change的版本说明:
Re Climbing: graftabl 是XP自带的命令行工具,2000下也应该有。这是引用自WindowsXP帮助文档中的文字。
[ Last edited by willsort on 2005-10-8 at 21:35 ] |
|
| 第11楼 sglxy | 发表于 2005-10-08 21:34 |
| 中级用户 发帖 87 积分 397 | |
|
谢谢了willsort老师,你的意思是change本身是16位DOS下的程序,看来是我自己的问题,我再慢慢研究。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |