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

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

J'ai essayé d'éjecter le lecteur de cd avec l'utilisation du 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.

EDIT Maintenant les gens ont trouvé cette réponse sur superuser,

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 comme une commande interne ou externe, un programme exploitable ou un fichier batch.

Réponses (6)

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

Vous pouvez éjecter un cd avec un fichier batch (c'est la partie 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 :

Post Link : (https://stackoverflow.com/a/28422571) Répondre à l'auteur : Bruno Date de la réponse : 10 février 2015

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

Vous pourriez utiliser la méthode Shell.Application COM de l'objet InvokeVerb. A partir d'un prompt cmd, vous pouvez ainsi abuser d'un one-liner PowerShell :

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

Vous pouvez également utiliser Windows Scripting Host (VBScript / JScript) pour invoquer l'objet COM. Voici un exemple utilisant un script hybride Batch + Jscript (à sauvegarder 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 du lecteur de CD, cela peut également être arrangé. Voici une version plus complète avec des commentaires expliquant certaines des valeurs non explicites.

@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

L'utilisation de WMPlayer.OCX.7 fera démarrer la plupart des programmes anti-virus et il existe certaines versions de Windows qui ne disposent pas de lecteur multimédia. Voici un moyen avec l'application 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'info -)

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

Ligne de commande d'éjection de CD en ligne de commande :

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

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

Dans Windows 10, j'utilise ce petit script. Il fonctionne !

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

Si vous pouvez utiliser une application tierce, vous pouvez utiliser Nirsoft’s nircmd . Sur tous les PC 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.