中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-10 15:53
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行
DOS批处理 & 脚本技术(批处理室) » 如何在关机前自动弹出有光盘的光驱
可打印版本  7,024 / 18
第1楼 zrz444 发表于 2006-08-15 07:24
新手上路 发帖 6 积分 16
如何在关机前自动弹出有光盘的光驱
是这样的:有一个朋友出一个问题.让我做一个批处理.要求是如果光驱里有光盘那个就光不了机器自动弹出,.如果没有光盘在里面可以顺利关机.我对批处理是一窍不 通的.自己乱做做.结果只能关机其他全不对:帮我看一下那儿不对::

@echo off

rundll32/
check cdrom echo.

if exist cdorm=empty


echo 您的光驱没有光盘,可以关机!

shutdown
otherwise
echo 你的光驱里有软盘,系统将自动弹出!
open cdrom
wait 请将光盘拿出,按任意键继续……

shut down

[ Last edited by namejm on 2007-2-3 at 03:59 PM ]
第2楼 zrz444 发表于 2006-08-15 16:53
新手上路 发帖 6 积分 16
不会吧.这么多高手哪儿去了.
第3楼 zrz444 发表于 2006-08-15 18:42
新手上路 发帖 6 积分 16
那么多版主做什么呢.这么冷清清的.......
第4楼 3742668 发表于 2006-08-15 23:30
荣誉版主 发帖 718 积分 2,013
那么多版主做什么呢.这么冷清清的.......

就算是版主也不可能一天24小时在论坛上专门来回贴嘛。
关于你的标题,请参考本版置顶贴进行更改,否则将依惯例进行相应处罚。
给你点提示吧:

大致代码就是这么多,细节方面自行更改。

ps:
俗话说:尺有所短,寸有所长;术业有专攻。也许版主在某个方面比大多数人要专上那么一点,但是并不代表其他的网友就都不如版主了,所以对于你的标题个人认为是十分不妥当的,建议参照本版版规自行更改,本次也就不扣积分了。
第5楼 zrz444 发表于 2006-08-16 08:31
新手上路 发帖 6 积分 16
初来乍到规矩不懂,这次前来受益匪浅,以后常来悉心听教...
第6楼 electronixtar 发表于 2006-08-16 15:20
铂金会员 发帖 2,672 积分 7,493

pushd g: 2>nul || goto shutdown


学习了!

其实弹光驱一句话就够了:


那个
cdromCollection.Item(0)

0 就是第一个光驱, 1 就是第二个,类推

[ Last edited by electronixtar on 2006-8-16 at 15:25 ]
第7楼 NaturalJ0 发表于 2006-08-16 15:46
银牌会员 发帖 533 积分 1,181
pushed g: 2>nul
里面的 2 是什么意思?
如果想收光驱回去,应该怎么写?
第8楼 zrz444 发表于 2006-08-16 20:46
新手上路 发帖 6 积分 16
不错...又学习了..
第9楼 zh159 发表于 2006-08-16 23:44
金牌会员 发帖 1,467 积分 3,687
Originally posted by NaturalJ0 at 2006-8-16 15:46:
pushed g: 2>nul
里面的 2 是什么意思?
如果想收光驱回去,应该怎么写?

2是表示输出错误句柄(执行错误),如果pushd g:执行错误,则“goto shutdown”
如果执行正确,就执行下面弹出光驱的命令


Set wmp = CreateObject("WMPlayer.OCX.7")
Set cdrom = wmp.cdromCollection
cdrom.Item(0).eject
cdrom.Item(0).eject

这段是我刚学会的打开、关闭光驱的VBS脚本;没有后面红色一句为打开光驱,完整的为:光驱关闭时,运行后打开后立即关闭,光驱打开时运行后关闭

PS:其实这两句同等于:“CreateObject("WMPlayer.OCX.7").cdromCollection.Item(0).Eject”
但是直接用两句“CreateObject("WMPlayer.OCX.7").cdromCollection.Item(0).Eject”却不成功


ON ERROR RESUME NEXT
Set wmp = CreateObject("WMPlayer.OCX.7")
Set cdrom = wmp.cdromCollection
If cdrom.Count >= 1 then '(该句用来判断你的系统中装了多少个光驱)
For z = 0 to cdrom.Count - 1
cdrom.Item(z).eject
Next
For z = 0 to cdrom.Count - 1
cdrom.Item(z).eject
Next

End If

这段是在网上找到的,可以打开、关闭多个光驱,上面的是精简为一个光驱的,红色部分同理

[ Last edited by zxcv on 2006-8-16 at 23:48 ]
第10楼 IceCrack 发表于 2006-08-17 08:21
中级用户 发帖 168 积分 332 来自 天涯
难不成论坛上有马甲 一个zrz444 一个zrz000
第11楼 zrz000 发表于 2006-08-17 08:41
初级用户 发帖 16 积分 44
是我同一个人哟。zrz444 注册时设置了安全提问。想上来时忘记了。只能注册了zrz000上来了。555555...
第12楼 3742668 发表于 2006-08-17 20:23
荣誉版主 发帖 718 积分 2,013
请楼主注意更改标题

PS:其实这两句同等于:“CreateObject("WMPlayer.OCX.7").cdromCollection.Item(0).Eject”
但是直接用两句“CreateObject("WMPlayer.OCX.7").cdromCollection.Item(0).Eject”却不成功

当然不成功了,两句“CreateObject("WMPlayer.OCX.7").cdromCollection.Item(0).Eject”分别创建了两个WMPlayer.OCX.7对象的两个实例,并分别调用了两个实例的eject方法(也就是打开光驱)。实例和对象是两个不同的概念,不应该混淆了。要打开并关驱过3秒后关闭,可以尝试下面的脚本:

另外值得注意的是:在调用vbs脚本以后,最好在批处理中加一句结束wscript.exe进程的代码,调用WMPlayer.OCX.7对象以后wscript.exe进程不会结束(其他对象会自动结束)。如果采用6F的方法的话则需要结束mshta.exe进程。

[ Last edited by 3742668 on 2006-8-17 at 21:50 ]
第13楼 richercdw 发表于 2006-12-02 09:15
初级用户 发帖 32 积分 62
结束wscript.exe进程的代码
结束wscript.exe进程的代码。这代码怎么写呀。急需
第14楼 electronixtar 发表于 2006-12-02 09:32
铂金会员 发帖 2,672 积分 7,493
好久没有来看看玩光驱的vbs了,顶一个。以前老是不能解决关闭光驱的问题,现在解决了,谢谢版主。

btw,用 Linux习惯 eject 命令了
第15楼 lxmxn 发表于 2006-12-02 14:41
版主 发帖 4,938 积分 11,386
Originally posted by richercdw at 2006-12-2 09:15:
结束wscript.exe进程的代码。这代码怎么写呀。急需


1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023