¿Cómo puedo expulsar un CD a través del cmd?

¿Cómo puedo expulsar un CD a través del cmd?

He estado intentando expulsar la unidad de CD con el uso del cmd.
Sin embargo, estoy perplejo. Buscando en internet solo encontré esta respuesta:

eject D: 

y una respuesta similar

eject D: /I

Ambos no funcionan.

EDITAR
Ahora la gente ha encontrado esta respuesta en superusuario,

Set oWMP = CreateObject("WMPlayer.OCX.7")
Set colCDROMs = oWMP.cdromCollection
colCDROMs.Item(0).Eject

Sin embargo, aparece un error:

colCDROMS.Item no se reconoce como un comando interno o externo, programa ejecutable o archivo por lotes.

Respuesta1

Puede expulsar un CD con un archivo por lotes (esto es parte de vbscript

@echo off
echo Set oWMP = CreateObject("WMPlayer.OCX.7")  >> %temp%\temp.vbs
echo Set colCDROMs = oWMP.cdromCollection       >> %temp%\temp.vbs
echo For i = 0 to colCDROMs.Count-1             >> %temp%\temp.vbs
echo colCDROMs.Item(i).Eject                    >> %temp%\temp.vbs
echo next                                       >> %temp%\temp.vbs
echo oWMP.close                                 >> %temp%\temp.vbs
%temp%\temp.vbs
timeout /t 1
del %temp%\temp.vbs

Este no es mi trabajo, lo encontré en la comunidad stackoverflow:

Enlace de publicación:¿Línea de comando por lotes para expulsar la bandeja del CD?
Autor de la respuesta:bruno
Fecha de respuesta: 10 de febrero de 2015

Respuesta2

Podrías usar el método Shell.Applicationdel objeto COM InvokeVerb. Desde un mensaje de cmd, puede abusar de una sola línea de PowerShell de la siguiente manera:

powershell "(new-object -COM Shell.Application).NameSpace(17).ParseName('D:').InvokeVerb('Eject')"

También puede utilizar Windows Scripting Host (VBScript/JScript) para invocar el objeto COM. A continuación se muestra un ejemplo que utiliza un script híbrido Batch + Jscript (guárdelo con una extensión .bat):

@if (@CodeSection == @Batch) @then

@echo off
setlocal

set "CDdrive=D:"

cscript /nologo /e:JScript "%~f0" "%CDdrive%"

goto :EOF

@end // end batch / begin JScript hybrid chimera
var oSH = WSH.CreateObject('Shell.Application');
oSH.NameSpace(17).ParseName(WSH.Arguments(0)).InvokeVerb('Eject');

Si prefiere que su secuencia de comandos detecte la letra de la unidad de CD, eso también se puede arreglar. Aquí hay una versión más completa con comentarios que explican algunos de los valores que no se explican por sí solos.

@if (@CodeSection == @Batch) @then

@echo off
setlocal

cscript /nologo /e:JScript "%~f0"

goto :EOF

@end // end batch / begin JScript hybrid chimera

// DriveType=4 means CD drive for a WScript FSO object.
// See http://msdn.microsoft.com/en-us/library/ys4ctaz0%28v=vs.84%29.aspx

// NameSpace(17) = ssfDRIVES, or My Computer.
// See http://msdn.microsoft.com/en-us/library/windows/desktop/bb774096%28v=vs.85%29.aspx

var oSH = new ActiveXObject('Shell.Application'),
    FSO = new ActiveXObject('Scripting.FileSystemObject'),
    CDdriveType = 4,
    ssfDRIVES = 17,
    drives = new Enumerator(FSO.Drives);

while (!drives.atEnd()) {
    var x = drives.item();
    if (x.DriveType == CDdriveType) {
        oSH.NameSpace(ssfDRIVES).ParseName(x.DriveLetter + ':').InvokeVerb('Eject');
        while (x.IsReady)
            WSH.Sleep(50);
    }
    drives.moveNext();
}

Respuesta3

Línea de comando para expulsar CD oneliner:

En un archivo bat o directamente en cmdesto funcionó después de la primera ejecución wmplayeren Windows 8:

powershell (New-Object -com "WMPlayer.OCX.7").cdromcollection.item(0).eject()

Respuesta4

Si puede utilizar una aplicación de terceros, puede utilizarNircmd de Nirsoft. En todas las PC que probé (desde Windows XP hasta Windows 8), pude expulsar el disco usando:

"C:\path_to\nircmd.exe" cdrom open X:

Donde X es la letra de su unidad de disco.

información relacionada