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


24

J'ai essayé d'éjecter le lecteur de CD avec l'utilisation de la cmd.
Cependant, je suis perplexe. En recherchant 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 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 comme une commande interne ou externe, un programme exploitable ou un fichier de commandes.


Im exécutant Windows 7, donc les fichiers batch de xp peuvent ne pas fonctionner.

Je pose une question Meta à ce sujet, car je suis également confus, et la balise ne fait aucune mention du moment où les batch-filequestions deviennent hors sujet.
AStopher

La version xp me pose des problèmes.


2
Ce n'est certainement pas un script de fichier batch; c'est VBS
Canadian Luke REINSTATE MONICA

Réponses:


19

Vous pouvez éjecter un cd avec un fichier batch (cela fait 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:

Lien de publication: ligne de commande par lots pour éjecter le plateau de CD?
Réponse Auteur: Bruno
Date de réponse: 10 févr.2015


14
Vous devez indiquer d'où vous l'avez obtenu: ce n'est pas mon travail, je l'ai trouvé en ligne. . Si vous ne vous en souvenez pas, vous devez supprimer votre réponse pour des raisons de droits d'auteur.
AStopher

Cette réponse est en cours de discussion sur Meta: Comment traitons-nous les réponses qui ne sont pas attribuées?
AStopher

6
Techniquement parlant, il s'agit d'une solution VBS, pas d'une solution de fichier batch.
Dan Henderson

4
Pour clarifier mon commentaire précédent, je ne veux pas dire que ce n'est pas une réponse appropriée à la question posée, mais simplement que la ligne d'ouverture "Vous pouvez éjecter un CD avec un fichier batch" devrait être légèrement modifiée. Si la configuration de mon système prend en charge l'exécution de fichiers batch mais pas de scripts VB, cette réponse ne fonctionnera pas pour moi.
Dan Henderson

À partir de décembre 2016, Windows Defender sur Windows 10 détectera le script généré comme un virus lors de son exécution
hooby3dfx

18

Vous pouvez utiliser la méthode de Shell.Applicationl'objet COM InvokeVerb. À partir d'une invite de commande cmd, vous pouvez ainsi abuser d'une ligne unique PowerShell:

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

Vous pouvez également utiliser l'hôte de script Windows (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, cela peut également être organisé. 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

Ligne de commande CD-eject oneliner:

Dans un fichier bat ou directement dans cmdcela a fonctionné après la première exécution de wmplayersur Windows 8:

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

4

L'utilisation WMPlayer.OCX.7va surprendre la plupart des programmes antivirus et certaines versions de Windows sont fournies sans lecteur multimédia. Voici un moyen avec shell.application et la fonction invokeVerb:

enregistrez-le avec l' .batextension:

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

Même avec eject.bat *ça me dit no cd drive found with letter d:. Pourquoi est-ce possible? Si je clique avec le bouton droit sur le lecteur et choisis "Ejecter", il s'éjecte.
Brad Turek

@BradTurek - ce pourrait être la langue (si ce n'est pas l'anglais). Ou si vous avez des actions personnalisées associées au clic droit sur les lecteurs de CD. Si vous cliquez avec le bouton droit sur l'action d'éjection du périphérique CD / DVD doit être le 4e à partir du bas (l'emplacement par défaut).
npocmaka

0

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

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

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


0

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

Veuillez relire attentivement la question. Votre réponse ne répond pas à la question d'origine. Op utilise Windows 7 et il a déjà essayé votre script et a dit que cela ne fonctionnait pas.
DavidPostill

ce script est-il pour cmd, powershell ou smth d'autre?
YakovL
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.