中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何在关机前自动弹出有光盘的光驱
« [1] [2] »
作者:
标题: 如何在关机前自动弹出有光盘的光驱 取消高亮 | 上一主题 | 下一主题
zrz444
新手上路





积分 16
发帖 6
注册 2006-8-14
状态 离线
『楼 主』:  如何在关机前自动弹出有光盘的光驱

是这样的:有一个朋友出一个问题.让我做一个批处理.要求是如果光驱里有光盘那个就光不了机器自动弹出,.如果没有光盘在里面可以顺利关机.我对批处理是一窍不 通的.自己乱做做.结果只能关机其他全不对:帮我看一下那儿不对::

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

2006-8-15 07:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zrz444
新手上路





积分 16
发帖 6
注册 2006-8-14
状态 离线
『第 2 楼』:  

不会吧.这么多高手哪儿去了.

2006-8-15 16:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zrz444
新手上路





积分 16
发帖 6
注册 2006-8-14
状态 离线
『第 3 楼』:  

那么多版主做什么呢.这么冷清清的.......

2006-8-15 18:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 4 楼』:  



  Quote:
那么多版主做什么呢.这么冷清清的.......

就算是版主也不可能一天24小时在论坛上专门来回贴嘛。
关于你的标题,请参考本版置顶贴进行更改,否则将依惯例进行相应处罚。
给你点提示吧:
@echo off
:start
    rem 假设光驱盘符为g盘,下面这句用于判断是否光驱内是否有盘
    pushd g: 2>nul || goto shutdown
    popd

    rem 下面两句用来弹出光驱
    echo CreateObject("WMPlayer.OCX.7").cdromCollection.Item(0).Eject >%temp%\弹出光驱.vbs
    start %temp%\弹出光驱.vbs
    pause

goto start

:shutdown
    rem 关机部分
    shutdown -s -t 00
大致代码就是这么多,细节方面自行更改。

ps:
俗话说:尺有所短,寸有所长;术业有专攻。也许版主在某个方面比大多数人要专上那么一点,但是并不代表其他的网友就都不如版主了,所以对于你的标题个人认为是十分不妥当的,建议参照本版版规自行更改,本次也就不扣积分了。

2006-8-15 23:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zrz444
新手上路





积分 16
发帖 6
注册 2006-8-14
状态 离线
『第 5 楼』:  

初来乍到规矩不懂,这次前来受益匪浅,以后常来悉心听教...

2006-8-16 08:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 6 楼』:  



  Quote:
pushd g: 2>nul || goto shutdown

学习了!

其实弹光驱一句话就够了:
mshta "javascript:new ActiveXObject('WMPlayer.OCX').cdromCollection.Item(0).Eject();window.close();"
那个
cdromCollection.Item(0)

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

[ Last edited by electronixtar on 2006-8-16 at 15:25 ]




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-8-16 15:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 7 楼』:  

pushed g: 2>nul
里面的 2 是什么意思?
如果想收光驱回去,应该怎么写?

2006-8-16 15:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zrz444
新手上路





积分 16
发帖 6
注册 2006-8-14
状态 离线
『第 8 楼』:  

不错...又学习了..

2006-8-16 20:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by NaturalJ0 at 2006-8-16 15:46:
pushed g: 2>nul
里面的 2 是什么意思?
如果想收光驱回去,应该怎么写?

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

  Quote:
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”却不成功

  Quote:
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 ]

2006-8-16 23:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
IceCrack
中级用户

DOS之友


积分 332
发帖 168
注册 2005-10-6
来自 天涯
状态 离线
『第 10 楼』:  

难不成论坛上有马甲  一个zrz444 一个zrz000



测试环境: windows xp pro sp2    高手是这样炼成的:C:\WINDOWS\Help\ntcmds.chm
2006-8-17 08:21
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (369525996)  编辑帖子  回复  引用回复
zrz000
初级用户





积分 44
发帖 16
注册 2006-8-15
状态 离线
『第 11 楼』:  

是我同一个人哟。zrz444 注册时设置了安全提问。想上来时忘记了。只能注册了zrz000上来了。555555...

2006-8-17 08:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 12 楼』:  

请楼主注意更改标题

  Quote:
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秒后关闭,可以尝试下面的脚本:
With CreateObject("WMPlayer.OCX.7").cdromCollection:.Item(0).eject:WScript.Sleep 3000:.Item(0).eject:End With
另外值得注意的是:在调用vbs脚本以后,最好在批处理中加一句结束wscript.exe进程的代码,调用WMPlayer.OCX.7对象以后wscript.exe进程不会结束(其他对象会自动结束)。如果采用6F的方法的话则需要结束mshta.exe进程。

[ Last edited by 3742668 on 2006-8-17 at 21:50 ]

2006-8-17 20:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
richercdw
初级用户





积分 62
发帖 32
注册 2006-11-8
状态 离线
『第 13 楼』:  结束wscript.exe进程的代码

结束wscript.exe进程的代码。这代码怎么写呀。急需

2006-12-2 09:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 14 楼』:  

好久没有来看看玩光驱的vbs了,顶一个。以前老是不能解决关闭光驱的问题,现在解决了,谢谢版主。

btw,用 Linux习惯 eject 命令了




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-12-2 09:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by richercdw at 2006-12-2 09:15:
结束wscript.exe进程的代码。这代码怎么写呀。急需


taskkill /im wscript.exe /f


2006-12-2 14:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: