|
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 |
|
|
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 |
|
|
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 |
|