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

Wie kann ich eine CD über die cmd auswerfen?

Advertisement

Ich habe versucht, das CD-Laufwerk mit Hilfe von cmd auszuwerfen. Ich bin jedoch ratlos. Bei der Suche im Internet habe ich nur diese Antwort gefunden:

eject D:

& und eine ähnliche Antwort

eject D: /I

Beide funktionieren nicht.

EDIT Jetzt haben Leute diese Antwort auf superuser gefunden,

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

Ich bekomme jedoch einen Fehler:

colCDROMS.Item wird nicht als interner oder externer Befehl, lauffähiges Programm oder Batch-Datei erkannt.

Advertisement
Advertisement

Antworten (6)

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

Sie können eine CD mit einer Batch-Datei auswerfen (dies ist ein Teil 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

Dies ist nicht meine Arbeit, ich habe sie in der Stackoverflow-Community gefunden:

Post Link: Batch Command Line to Eject CD Tray? Antwort Autor: Bruno Datum beantwortet: Feb 10, 2015

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

Sie könnten die Methode Shell.Application des COM-Objekts InvokeVerb verwenden. Von einer cmd-Eingabeaufforderung aus können Sie einen PowerShell-Einzeiler folgendermaßen missbrauchen:

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

Sie können auch Windows Scripting Host (VBScript / JScript) verwenden, um das COM-Objekt aufzurufen. Hier ist ein Beispiel mit einem hybriden Batch + Jscript-Skript (speichern Sie es mit der Erweiterung .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');

Wenn Sie es vorziehen, dass Ihr Skript den Laufwerksbuchstaben für das CD-Laufwerk erkennt, kann auch das eingerichtet werden. Hier ist eine vollständigere Version mit Kommentaren, die einige der nicht selbsterklärenden Werte erklären.

@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
Advertisement
4
4
2015-09-13 14:46:50 +0000
Advertisement

Die Verwendung von WMPlayer.OCX.7 wird die meisten Antivirenprogramme aufschrecken und es gibt einige Windows-Versionen, die ohne Media Player ausgeliefert werden. Hier ist ein Weg mit shell.application und der Funktion invokeVerb:

speichern Sie dies mit .bat Erweiterung:

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

Sie können es wie folgt verwenden (für mehr Info -)

4
4
4
2016-03-09 13:50:12 +0000

Kommandozeile CD-Auswurf Oneliner:

In einer Bat-Datei oder direkt in cmd dies funktionierte nach dem ersten Start von wmplayer unter Windows 8:

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

Unter Windows 10 verwende ich dieses kleine Skript. Es funktioniert!

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

Wenn Sie eine Anwendung eines Drittanbieters verwenden können, können Sie Nirsoft’s nircmd verwenden. Auf allen PCs, die ich ausprobiert habe (von Windows XP bis Windows 8), konnte ich den Datenträger auswerfen mit:

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

Wobei X Ihr Laufwerksbuchstabe ist.

Advertisement

Verwandte Fragen

3
19
10
28
9
Advertisement
Advertisement