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.
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
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();
}
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()
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 *
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.
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