中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » (已结)为何我使用find /v 后得到了相反的结果?
作者:
标题: (已结)为何我使用find /v 后得到了相反的结果? 上一主题 | 下一主题
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
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
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
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: