中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问在批处理文件里COMMAND的调用方法?
作者:
标题: 请问在批处理文件里COMMAND的调用方法? 上一主题 | 下一主题
icevan
初级用户





积分 67
发帖 12
注册 2005-8-15
状态 离线
『楼 主』:  请问在批处理文件里COMMAND的调用方法?

问题来源于无忧论坛里一篇《怎么判断多光驱中哪个光驱有盘?》的问题?
一位名为gotomsdos的朋友给出的一个方法为:
在CONFIG.SYS中使SHELL=COMMAND.COM /F /P /E:640 抑制ABORT,RETRY,FAIL出错提示,然后在编写一个F。BAT文件添加下面的内容:
findcd /s  
if exist %cdrom1%\sound\sbinit.com goto cd1
if exist %cdrom2%\sound\sbinit.com goto cd2
if exist %cdrom3%\sound\sbinit.com goto cd3
if exist %cdrom4%\sound\sbinit.com goto cd4

:cd1
%cdrom1%
set romcd=%cdrom1%
goto end

:cd2
%cdrom2%
set romcd=%cdrom2%
goto end

:cd3
%cdrom3%
set romcd=%cdrom3%
goto end

:cd4
%cdrom4%
set romcd=%cdrom4%
goto end

:end
这样就可以判断光盘在哪个光驱里。但这样做可能会影响到其他需要手工选择判断选择错误提示的命令。
换句话说就是开始使用/F开关后能不能在关掉它?

后来我想能否在执行这些代码前加载一个新的COMMAND/F 来解释这个BAT文件,完成后再退出新的COMMAND。于是在文件开头加入“COMMAND/F” 可执行到这句的时候就中断了,停在了新的COMMAND提示符下。要退出后才能继续运行下面的命令。看来在BAT文件里加不了或者加载的方法不对。
然后又去掉文件里的COMMAND/F。再执行COMMAND/F/K  F。BAT可以运行
可这达不到要求啊。。。

2005-8-19 00:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 2 楼』:  

运行COMMAND是直接加载一个新的COMMAND并提示DOS版本号和命令提示符,你可以试试运行COMMAND后,再运行需要自动应答“Abort, Retry, Fail”的批处理,最后exit,则新的COMMAND自动退出,返回原来的不自动应答的状态。

COMMAND /F
F.BAT
EXIT



----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2005-8-19 15:07
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 3 楼』:  

Re icevan:

      command /f 后面需要用 /c 开关调用你所需要忽视错误提示的批处理程序或者内外不命令;当然,问题不是单纯用 command /f 就可以解决的,你可以参考以下的链接:

      {12892}关于“硬盘杀手”批处理的讨论



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-8-19 16:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
icevan
初级用户





积分 67
发帖 12
注册 2005-8-15
状态 离线
『第 4 楼』:  

谢谢楼上的2位帮助
现在有个新问题了:
用COMMAND/F/C调用F.BAT文件是可以自动应答"ABORT,RETRY,FAIL"后在退出这个新壳(不知道用壳来说对不对?)
但在新壳里产生的变量romcd也随之消失了,怎样才能在原来的环境里加入新环境里的变量呢?新环境里到是可以继承老环境里变量.

自己又试了下~找了个笨办法把新环境的变量加到老环境里,修改F.BAT为:

if exist %cdrom1%\tools\vc.ini goto cd1  (VC.INI为光盘里的文件)
if exist %cdrom2%\tools\vc.ini goto cd2

:cd1
set romcd=%cdrom1%
echo set cd-rom=%romcd%>scd.bat
goto end

:cd2
然后在调用SCD.BAT文件.谁有好的方法请告知一下?
   PS:<关于“硬盘杀手”批处理的讨论>能力不够没看懂~~
再PS:COMMAND/F/C F.BAT执行后自动应答选择,但屏幕上还是出现了ABORT,RETRY,FAIL的提示~怎样能让它不显示呢?

[ Last edited by icevan on 2005-8-20 at 22:49 ]

2005-8-20 21:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by icevan at 2005-8-20 21:41:
但在新壳里产生的变量romcd也随之消失了,怎样才能在原来的环境里加入新环境里的变量呢?新环境里到是可以继承老环境里变量.

呵呵,楼主这个问题引起了我的注意。我从没料到还有这种情况。

作为命令解释器的Command.com运行在以IO.SYS和MSDOS.SYS构建的DOS平台下,Command就好像Windows的壳Explorer.exe,那就姑且叫它为DOS的壳吧。



----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2005-8-20 22:14
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 6 楼』:  

Re icevan:

      command 完全称为"壳",从 config.sys 中用于加载 command 的 shell 命令就可以看出来,而此时的核就应该是 io.sys(旧版还有msdos.sys),它们提供了很多中断服务和设备端口供“命令解释器”频繁的调用。

      至于环境变量的回传,可以先在子壳(新壳)中将变量保存到批处理程序中,比如 echo set var=%var%>_return.bat ,待回到母壳(旧壳)后再将它提取出来即可。比如 call _return.bat 。

      另外,如果觉得那篇讨论过于抽象,可以参考这个帖子:

      {8804}可自定义密码的密码程序(批处理)

[ Last edited by willsort on 2005-8-20 at 22:45 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-8-20 22:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
icevan
初级用户





积分 67
发帖 12
注册 2005-8-15
状态 离线
『第 7 楼』:  

又看了<关于“硬盘杀手”批处理的讨论>后解决了屏蔽ABORT,RETRY,FAIL的提示的问题。
不过又有问题了~
“在 XP 等 NT 类命令行 ctty
被取消了。在此类环境中,只能通过 2> nul 重定向错误消息。”

请问 2次重定向到NUL怎么做的?

[ Last edited by icevan on 2005-8-21 at 16:22 ]

2005-8-20 22:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: