在没有外部文件的 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 弹出的主要内容,如果未能解决你的问题,请参考以下文章

从 WinPE 提示符访问 USB 驱动器

Windows ADK笔记一:制作自己的Winpe镜像

宏碁找不到触摸板

GHOST镜像备份

系统崩溃后备份重要数据

无法在bash脚本中使用外部变量cd [关闭]