2015-09-13 14:25:48 +0000 2015-09-13 14:25:48 +0000
25
25

Hoe kan ik een CD uitwerpen via cmd?

Ik heb geprobeerd om de cd-drive uit te werpen met behulp van de cmd. Echter, ik ben vastgelopen. Zoekend op het internet, vond ik alleen dit antwoord:

eject D:

en een gelijkaardig antwoord

eject D: /I

Beide werken niet.

EDIT Nu hebben mensen dit antwoord gevonden op superuser,

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

Echter, ik krijg een foutmelding:

colCDROMS.Item wordt niet herkend als een intern of extern commando, operabel programma of batchbestand.

Antwoorden (6)

19
19
19
2015-09-13 14:29:11 +0000

Je kunt een cd uitwerpen met een batchbestand (dit is een deel 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

Dit is niet mijn werk, ik vond het in de stackoverflow community:

Post Link: Batch Command Line to Eject CD Tray? ](https://stackoverflow.com/a/28422571) Answer Author: Bruno ](https://stackoverflow.com/users/3422247/bruno) Datum Beantwoord: Feb 10, 2015

19
19
19
2015-09-13 17:53:23 +0000

Je zou de Shell.Application COM object’s InvokeVerb methode kunnen gebruiken. Vanaf een cmd prompt, kun je een PowerShell one-liner zo misbruiken:

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

Je kunt ook Windows Scripting Host (VBScript / JScript) gebruiken om het COM object aan te roepen. Hier is een voorbeeld met een hybride Batch + Jscript script (sla het op met een .bat extensie):

@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');

Als je er de voorkeur aan geeft om je script de driveletter voor de CD drive te laten detecteren, dan kan dat ook geregeld worden. Hier is een meer complete versie met commentaar dat enkele van de niet voor zichzelf sprekende waarden uitlegt.

@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();
}
4
4
4
2015-09-13 14:46:50 +0000

Het gebruik van WMPlayer.OCX.7 zal de meeste anti-virus programma’s doen schrikken en er zijn sommige versies van windows die zonder media player komen. Hier is een manier met shell.application en invokeVerb functie:

sla dit op met de extensie .bat:

@cScript.EXE //noLogo "%~f0?.WSF" //job:info %~nx0 %*
@exit /b 0

   <job id="info">
      <script language="VBScript">
        if WScript.Arguments.Count < 2 then
            WScript.Echo "No drive letter passed"
            WScript.Echo "Usage: " 
            WScript.Echo " " & WScript.Arguments.Item(0) & " {LETTER|*}"
            WScript.Echo " * will eject all cd drives"
            WScript.Quit 1
        end if
        driveletter = WScript.Arguments.Item(1):
        driveletter = mid(driveletter,1,1):

        Public Function ejectDrive (drvLtr)
            Set objApp = CreateObject( "Shell.Application" ):
            Set objF=objApp.NameSpace(&H11&):
            'WScript.Echo(objF.Items().Count):
            set MyComp = objF.Items():
            for each item in objF.Items() :
                iName = objF.GetDetailsOf (item,0): 
                iType = objF.GetDetailsOf (item,1): 
                iLabels = split (iName , "(" ) :
                iLabel = iLabels(1):

                if Ucase(drvLtr & ":)") = iLabel and iType = "CD Drive" then
                    set verbs=item.Verbs():
                    set verb=verbs.Item(verbs.Count-4):
                    verb.DoIt():
                    item.InvokeVerb replace(verb,"&","") :
                    ejectDrive = 1:
                    exit function:

                end if
            next    
            ejectDrive = 2:
        End Function

        Public Function ejectAll ()
            Set objApp = CreateObject( "Shell.Application" ):

            Set objF=objApp.NameSpace(&H11&):
            'WScript.Echo(objF.Items().Count):
            set MyComp = objF.Items():
            for each item in objF.Items() :
                iType = objF.GetDetailsOf (item,1):                                 
                if iType = "CD Drive" then
                    set verbs=item.Verbs():
                    set verb=verbs.Item(verbs.Count-4):
                    verb.DoIt():
                    item.InvokeVerb replace(verb,"&","") :
                end if

            next
        End Function
        if driveletter = "*" then 
            call ejectAll
            WScript.Quit 0
        end if
        result = ejectDrive (driveletter):

        if result = 2 then
            WScript.Echo "no cd drive found with letter " & driveletter & ":"
            WScript.Quit 2
        end if

      </script>
  </job>

Je kunt het gebruiken zoals (voor meer info -)

call eject.bat *
4
4
4
2016-03-09 13:50:12 +0000

Commando-regel CD-eject oneliner:

In een bat-bestand of rechtstreeks in cmd dit werkte na eerste run van wmplayer op Windows 8:

powershell (New-Object -com "WMPlayer.OCX.7").cdromcollection.item(0).eject()
0
0
0
2016-10-04 12:15:44 +0000

In Windows 10 gebruik ik dit kleine script. Het werkt!

dim oWMP
  Set oWMP = CreateObject("WMPlayer.OCX.7")
  Set colCDROMs = oWMP.cdromCollection
  colCDROMs.Item(0).Eject
  set oWMP = nothing
0
0
0
2016-07-13 12:56:48 +0000

Als u een toepassing van derden kunt gebruiken, kunt u Nirsoft’s nircmd gebruiken. Op alle PC’s die ik geprobeerd heb (van Windows XP tot Windows 8), kon ik de schijf uitwerpen met:

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

Waarbij X de letter van je schijfstation is.