|
sglxy
中级用户
MS-DOS爱好者
积分 397
发帖 87
注册 2002-12-15
状态 离线
|
『楼 主』:
(已结)为何我使用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 ]
|
|
2005-10-7 11:05 |
|
|
无奈何
荣誉版主
积分 1338
发帖 356
注册 2005-7-15
状态 离线
|
『第
2 楼』:
你的第一条命令, 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 ]
|
|
2005-10-7 12:16 |
|
|
sglxy
中级用户
MS-DOS爱好者
积分 397
发帖 87
注册 2002-12-15
状态 离线
|
『第
3 楼』:
Quote: | Originally posted by 无奈何 at 2005-10-7 12:16 PM:
你的第一条命令, echo tmp.txt| find ..... 肯定不是你要的结果,应该是 type tmp.txt| find .....
你的第二条命令,在我这里一点问题也没有,我也是winXP。
妠... |
|
谢谢你,兄弟!我根据你的提示重新作了测试,正如你所说:第一句的echo应该是type。而且以前没有成功的原因我也找到了,原来是在我所测试的目录里还存在一个find.com !把这个find.com改名为find.co_后再运行那个批处理就OK了。
再次谢谢你的帮助!
|
|
2005-10-7 14:18 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
4 楼』:
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。
|
※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2005-10-7 16:08 |
|
|
sglxy
中级用户
MS-DOS爱好者
积分 397
发帖 87
注册 2002-12-15
状态 离线
|
『第
5 楼』:
噢,原来是这样,谢谢老师。那么我现在是在做自己的系统恢复盘,作成后主要用在DOS纯环境下,应该不用靠滤临时生成的文本文件中会出现这个“Invalid keyboard code specified”文字吧?也就是说在DOS下运行这些文件应该不会生成这行文字,是吗?
|
|
2005-10-8 07:28 |
|
|
Climbing
铂金会员
网络独行侠
积分 6962
发帖 2753
注册 2003-4-16 来自 河北保定
状态 离线
|
『第
6 楼』:
Re sglxy:
是的,在纯DOS环境下不需要过滤这行字符。
Re willsort:
请问graftab是什么命令?
|
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
|
|
2005-10-8 10:18 |
|
|
sglxy
中级用户
MS-DOS爱好者
积分 397
发帖 87
注册 2002-12-15
状态 离线
|
『第
7 楼』:
谢谢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 ]
|
|
2005-10-8 19:30 |
|
|
JonePeng
金牌会员
D◎$ Fαп
积分 4562
发帖 1883
注册 2004-1-19 来自 广东广州
状态 离线
|
『第
8 楼』:
Quote: | Originally posted by sglxy at 2005-10-8 19:30:
我试过了生成的变量中在”F:“之前也是多了个空格,请问这个情况是怎么回事,会不会影响ghost的运行效果? 有没有必要用CHANGE命令去掉空格? CHANGE在纯dos下是否也能用? |
|
没必要去掉空格。不影响GHOST的运行的。CHANGE是什么命令?是DOS的外部命令还是Linux的?
|
----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
|
|
2005-10-8 19:59 |
|
|
sglxy
中级用户
MS-DOS爱好者
积分 397
发帖 87
注册 2002-12-15
状态 离线
|
『第
9 楼』:
感谢JonePeng老兄的回答,CHANGE可以在用行命令的方式替换文本文件中的内容,使用方法是:change d:\文件夹\*.txt /from "要更换的字符段" /to "更换后的内容"。只是我一直在Winxp下使用它,就是不知道CHANGE在纯dos下是否也能用?我在以前纯dos下试了一次没成功,有哪位明白的兄弟请告知,先谢谢了!
|
|
2005-10-8 20:42 |
|
|
willsort
元老会员
Batchinger
积分 4432
发帖 1512
注册 2002-10-18
状态 离线
|
『第
10 楼』:
Re sglxy:
change 应该是16位的DOS程序,除非你我所接触的不是一个版本。这是我所见到的Change的版本说明:
Quote: | CHANGE pgm by Bruce Guthrie, (c)2001 U.S. Dept of Commerce Revised 03/10/2001 |
|
Re Climbing:
graftabl 是XP自带的命令行工具,2000下也应该有。这是引用自WindowsXP帮助文档中的文字。
Quote: | Graftabl启用可在图形模式下显示扩展字符集的功能。
语法
graftabl [xxx] [/status]
参数
xxx
指定要在所定义的图形模式中显示扩展字符的代码页。下表显示了每个有效代码页标识号及其国家(地区)或者语言: 值 国家(地区)
437 美国
850 多语言(拉丁文 I)
852 斯拉夫语(拉丁文 II)
855 西里尔文(俄语)
857 土耳其语
860 葡萄牙语
861 冰岛语
863 加拿大 - 法语
865 日耳曼语
866 俄语
869 现代希腊语
/status
标识 graftabl 正在使用的代码页。
/?
在命令提示符显示帮助。
注释
有关使用代码页的信息,请参阅“相关主题”中的 chcp 或 mode (设置设备代码页)。
Graftabl 不更改控制台输入代码页。Graftabl 只影响指定代码页扩展字符的监视器显示。要更改正在使用的代码页,请使用 mode 或 chcp 命令。
理解 graftabl 退出码
下表列出了每个退出码及其简单描述。
退出码 说明
0 已成功装载字符集。未装载过去的代码页。
1 指定了不正确的参数未执行操作。
2 发生文件错误。
可以在批处理程序的 if 命令行上使用 errorlevel 参数来处理由 graftabl 返回的退出代码。
范例
要将代码页 437(美国)的图形字符集加载到内存,请键入:
Graftabl 437
要将代码页 850(多语种)的图形字符集加载到内存,请键入:
Graftabl 850 |
|
[ Last edited by willsort on 2005-10-8 at 21:35 ]
|
※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得! |
|
2005-10-8 21:04 |
|
|
sglxy
中级用户
MS-DOS爱好者
积分 397
发帖 87
注册 2002-12-15
状态 离线
|
『第
11 楼』:
谢谢了willsort老师,你的意思是change本身是16位DOS下的程序,看来是我自己的问题,我再慢慢研究。
|
|
2005-10-8 21:34 |
|