web-dev-qa-db-fra.com

Comment puis-je éjecter un CD via le cmd?

J'ai essayé d'éjecter le lecteur de CD avec l'utilisation de la cmd.
Cependant, je suis perplexe. En cherchant sur Internet, je n'ai trouvé que cette réponse:

eject D: 

et une réponse similaire

eject D: /I

Les deux ne fonctionnent pas.

MODIFIER
Maintenant les gens ont trouvé cette réponse sur le superutilisateur,

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

Cependant, j'obtiens une erreur:

colCDROMS.Item n'est pas reconnu en tant que commande interne ou externe, programme utilisable ou fichier de commandes.

24
Penguinz

Vous pouvez éjecter un CD avec un fichier de commandes (ceci fait partie 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

Ce n'est pas mon travail, je l'ai trouvé dans la communauté stackoverflow:

Publier le lien: Ligne de commande batch pour éjecter le plateau du CD?
Répondre Auteur: Bruno
Réponse à la question: le 10 février 2015

20
RookieTEC9

Vous pouvez utiliser la méthode InvokeVerb de l'objet Shell.Application COM. À partir d'un invite de commande, vous pouvez également utiliser un liner PowerShell one-liner:

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

Vous pouvez également utiliser Windows Scripting Host (VBScript/JScript) pour appeler l'objet COM. Voici un exemple utilisant un script hybride Batch + Jscript (enregistrez-le avec une extension .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 vous préférez que votre script détecte la lettre de lecteur du lecteur de CD, vous pouvez également organiser cela. Voici une version plus complète avec des commentaires expliquant certaines des valeurs non auto-explicatives.

@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();
}
17
rojo

Ligne de commande CD-éjecter oneliner:

Dans un fichier bat ou directement dans cmd, cela fonctionnait après la première exécution de wmplayer sous Windows 8:

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

L'utilisation de WMPlayer.OCX.7 surprendra la plupart des programmes antivirus et certaines versions de Windows sont livrées sans lecteur multimédia. Voici un moyen d'utiliser Shell.application et la fonction invokeVerb:

enregistrez ceci avec l'extension .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>

Vous pouvez l'utiliser comme (pour plus d'informations -)

call eject.bat *
4
npocmaka

Si vous pouvez utiliser une application tierce, vous pouvez utiliser nirsmd de Nirsoft. Sur tous les ordinateurs que j'ai essayés (de Windows XP à Windows 8), je pouvais éjecter le disque en utilisant:

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

Où X est la lettre de votre lecteur de disque.

0
gaborous

Dans Windows 10, j'utilise ce petit script. Ça marche!

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