Wie kann ich eine CD über die cmd auswerfen?


24

Ich habe versucht, das CD-Laufwerk mit dem Befehl 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 die Leute diese Antwort auf Superuser gefunden,

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

Ich erhalte jedoch eine Fehlermeldung:

colCDROMS.Item wird nicht als interner oder externer Befehl, ausführbares Programm oder Batch-Datei erkannt.


Ich lasse Windows 7 laufen, daher funktionieren Batch-Dateien von XP möglicherweise nicht.

Ich stelle dazu eine Meta-Frage, da ich ebenfalls verwirrt bin und der Tag nicht erwähnt, wann batch-fileFragen nicht mehr zum Thema gehören.
AStopher,

Die XP-Version gibt mir Probleme.


2
Das ist definitiv kein Batch-File-Scripting. Es ist VBS
Kanadier Luke REINSTATE MONICA

Antworten:


19

Sie können eine CD mit einer Stapeldatei auswerfen (dies ist Teil von 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: Stapelbefehlszeile zum Auswerfen des CD-Fachs?
Antwort Autor: Bruno
Datum der Beantwortung: 10.02.2015


14
Sie müssen angeben, woher Sie es haben: Dies ist nicht meine Arbeit, ich habe es online gefunden. . Wenn Sie sich nicht erinnern können, müssen Sie Ihre Antwort aus urheberrechtlichen Gründen löschen.
AStopher,


6
Technisch gesehen ist dies eine VBS-Lösung, keine Batchdatei-Lösung.
Dan Henderson

4
Um meinen vorherigen Kommentar zu verdeutlichen, möchte ich nicht sagen, dass dies keine angemessene Antwort auf die angegebene Frage ist, sondern lediglich, dass die Eröffnungszeile "Sie können eine CD mit einer Batch-Datei auswerfen" leicht geändert werden sollte. Wenn die Konfiguration meines Systems die Ausführung von Batch-Dateien, jedoch nicht von VB-Skripten unterstützt, funktioniert diese Antwort bei mir nicht.
Dan Henderson

Ab Dezember 2016
erkennt

18

Sie können Shell.Applicationdie InvokeVerbMethode des COM-Objekts verwenden. An einer Cmd-Eingabeaufforderung können Sie einen PowerShell-Einzeiler folgendermaßen missbrauchen:

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

Sie können das COM-Objekt auch mit Windows Scripting Host (VBScript / JScript) aufrufen. 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 dies ebenfalls arrangiert werden. Hier ist eine vollständigere Version mit Kommentaren, die einige der nicht selbsterklärenden Werte erläutern.

@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

Befehlszeile CD-Eject Oneliner:

In einer bat-Datei oder direkt in cmddieser funktionierte nach dem ersten Start wmplayerunter Windows 8:

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

4

Das Verwenden WMPlayer.OCX.7der meisten Antivirenprogramme erschreckt und es gibt einige Windows-Versionen, die ohne Media Player geliefert werden. Hier ist ein Weg mit der Funktion shell.application und invokeVerb:

Speichern Sie dies mit der .batErweiterung:

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

Du kannst es gerne benutzen (für mehr Infos -)

call eject.bat *

Sogar eject.bat *damit sagt es mir no cd drive found with letter d:. Warum könnte das so sein? Wenn ich mit der rechten Maustaste auf das Laufwerk klicke und "Auswerfen" wähle, wird es ausgeworfen.
Brad Turek

@BradTurek - es könnte die Sprache sein (wenn es nicht Englisch ist). Oder wenn Sie benutzerdefinierte Aktionen mit dem Rechtsklick auf CD-Laufwerke verknüpft haben. Wenn Sie mit der rechten Maustaste auf das CD / DVD-Gerät klicken, sollte die Auswurfaktion die 4. von unten sein (der Standardplatz).
Npocmaka

0

Wenn Sie eine Drittanbieteranwendung verwenden können, können Sie Nirsofts nircmd verwenden . Auf allen PCs, die ich ausprobiert habe (von Windows XP bis Windows 8), konnte ich die CD auswerfen mit:

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

Wobei X Ihr Laufwerksbuchstabe ist.


0

In Windows 10 verwende ich dieses kleine Skript. Es klappt!

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

Bitte lesen Sie die Frage noch einmal sorgfältig durch. Ihre Antwort beantwortet nicht die ursprüngliche Frage. Op verwendet Windows 7 und er hat Ihr Skript bereits ausprobiert und gesagt, dass es nicht funktioniert hat.
DavidPostill

Ist dieses Skript für Cmd, Powershell oder Smth?
YakovL
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.