在没有外部文件的 WinPE 中识别 CD 驱动器并使用 bat 或 vbs 弹出
Posted
技术标签:
【中文标题】在没有外部文件的 WinPE 中识别 CD 驱动器并使用 bat 或 vbs 弹出【英文标题】:Identify CD drive and eject using bat or vbs while in WinPE without external files 【发布时间】:2013-01-08 17:04:05 【问题描述】:我需要识别 CD 驱动器并弹出托盘。这是在 WinPE 中启动时执行的,因此 WMP 弹出功能不可用。该脚本将用于各种计算机型号/配置。我目前正在使用这个:
For Each d in CreateObject("Scripting.FileSystemObject").Drives
CreateObject("Shell.Application").Namespace(17).ParseName("D:\").InvokeVerb("Eject")
Next
它可以工作,但有时它会出错并且需要用户交互才能弹出。我怀疑这是因为硬编码的D:\
驱动器号,但我可能完全错了。我需要这个在没有 3rd 方实用程序的情况下工作。
【问题讨论】:
【参考方案1】:使用Drive
对象的DriveType
属性:
For Each d in CreateObject("Scripting.FileSystemObject").Drives
WScript.sleep 60
If d.DriveType = 4 Then
CreateObject("Shell.Application").Namespace(17).ParseName(d.DriveLetter & ":\").InvokeVerb("Eject")
End If
Next
【讨论】:
这与我一直在尝试的非常相似,并且您的脚本遇到了与我相同的错误。第 3 行字符 9,需要对象 hrmm,可能在 d.DriveLetter 后面加上 &":\" 是的,这消除了错误,但现在脚本根本没有做任何事情。 'For Each d in CreateObject("Scripting.FileSystemObject").Drives if d.DriveType = 4 then drv=d.DriveLetter & ":\" CreateObject("Shell.Application").Namespace(17).ParseName(drv) .InvokeVerb("Eject") end if next' 好吧,几个小时后,我通过在 for 循环中添加一个 'WScript.sleep 60' 让它工作了。这使它在每次迭代期间暂停 60 毫秒。也许是因为我在 WinPE 中并且它的迭代速度太快了?没有线索,但它有效。感谢您的所有帮助。 哇。好吧,我很高兴你能够让它工作。希望您的项目的其余部分进展顺利。【参考方案2】:这是使用媒体播放器弹出的代码;我不确定从您的 WinPE 环境调用是否容易:
' http://www.msfn.org/board/topic/45418-vbscript-for-openingclosing-cd/
' http://waxy.org/2003/03/open_cdrom_driv/
Set oWMP = CreateObject("WMPlayer.OCX.7" )
Set colCDROMs = oWMP.cdromCollection
For d = 0 to colCDROMs.Count - 1
colCDROMs.Item(d).Eject
Next 'null
B 计划是下载“eject.exe”的副本,并将其包含在您的 WinPE 媒体中:
http://www.911cd.net/forums/index.php?showtopic=2931&hl=cd+eject【讨论】:
如上所述,我无法使用 WMPlayer 或第 3 方文件。不过,谢谢。以上是关于在没有外部文件的 WinPE 中识别 CD 驱动器并使用 bat 或 vbs 弹出的主要内容,如果未能解决你的问题,请参考以下文章