Bagaimana saya bisa mengeluarkan CD melalui cmd?

24

Saya telah mencoba mengeluarkan cd drive dengan menggunakan cmd.
Namun, saya bingung. Mencari di internet, saya hanya menemukan jawaban ini:

eject D: 

dan jawaban yang serupa

eject D: /I

Keduanya tidak bekerja.

EDIT
Sekarang orang menemukan jawaban ini di superuser,

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

Namun, saya mendapatkan kesalahan:

colCDROMS.Item tidak dikenali sebagai perintah internal atau eksternal, program yang dapat dijalankan, atau file batch.

Penguinz
sumber
Saya menjalankan windows 7, jadi file batch dari xp mungkin tidak berfungsi.
Saya mengajukan pertanyaan Meta tentang ini karena saya juga bingung, dan tag tidak menyebutkan kapan batch-filepertanyaan menjadi di luar topik.
AStopher
Versi xp memberi saya masalah.
2
Itu jelas bukan skrip file Batch; ini VBS
Luke Kanada REINSTATE MONICA

Jawaban:

19

Anda dapat mengeluarkan cd dengan file batch (ini adalah bagian 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

Ini bukan pekerjaan saya, saya menemukannya di komunitas stackoverflow:

Posting Tautan: Batch Command Line untuk Mengeluarkan Baki CD?
Jawab Penulis: Bruno
Tanggal Dijawab: 10 Feb 2015

RookieTEC9
sumber
14
Anda harus menyatakan dari mana Anda mendapatkannya: Ini bukan pekerjaan saya, saya menemukannya online. . Jika Anda tidak ingat, Anda harus menghapus jawaban Anda karena alasan hak cipta.
AStopher
Jawaban ini sedang dibahas di Meta: Bagaimana kita menangani jawaban yang tidak dikaitkan?
AStopher
6
Secara teknis, ini adalah solusi VBS, bukan solusi file batch.
Dan Henderson
4
Untuk mengklarifikasi komentar saya sebelumnya, saya tidak bermaksud mengatakan bahwa ini bukan jawaban yang sesuai untuk pertanyaan seperti yang dinyatakan, hanya bahwa mungkin baris pembuka "Anda dapat mengeluarkan cd dengan file batch" harus diubah sedikit. Jika konfigurasi sistem saya mendukung eksekusi file batch tetapi bukan skrip VB, jawaban ini tidak akan berfungsi untuk saya.
Dan Henderson
Pada Desember 2016, Windows Defender pada Windows 10 akan mendeteksi skrip yang dihasilkan sebagai virus saat dijalankan
hooby3dfx
18

Anda bisa menggunakan metode Shell.Applicationobjek COM InvokeVerb. Dari prompt cmd, Anda dapat menggunakan PowerShell one-liner dengan demikian:

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

Anda juga dapat menggunakan Host Scripting Windows (VBScript / JScript) untuk memanggil objek COM. Berikut ini contoh menggunakan skrip Batch + Jscript hybrid (simpan dengan ekstensi .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');

Jika Anda lebih suka skrip Anda mendeteksi huruf drive untuk drive CD, itu dapat diatur juga. Berikut adalah versi yang lebih lengkap dengan komentar yang menjelaskan beberapa nilai yang tidak jelas.

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

Oneliner CD-eject baris perintah:

Dalam file bat atau langsung di cmdini berfungsi setelah dijalankan pertama kali wmplayerpada Windows 8:

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

Menggunakan WMPlayer.OCX.7akan mengejutkan sebagian besar program anti-virus dan ada beberapa versi windows yang datang tanpa media player. Inilah cara dengan fungsi shell.application dan invokeVerb:

simpan ini dengan .batekstensi:

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

Anda dapat menggunakannya seperti (untuk info lebih lanjut -)

call eject.bat *
npocmaka
sumber
Bahkan dengan eject.bat *itu memberitahuku no cd drive found with letter d:. Kenapa ini bisa terjadi? Jika saya mengklik kanan drive dan memilih "Eject", itu akan mengeluarkan.
Brad Turek
@BradTurek - bisa jadi bahasa (jika bukan bahasa Inggris). Atau jika Anda memiliki tindakan khusus yang terkait dengan klik kanan pada drive cd. Jika Anda mengklik kanan pada perangkat eject tindakan CD / DVD harus ke-4 dari bawah (tempat default).
npocmaka
0

Jika Anda dapat menggunakan aplikasi pihak ketiga, Anda dapat menggunakan nircmd Nirsoft . Pada semua PC yang saya coba (dari Windows XP ke Windows 8), saya dapat mengeluarkan disk menggunakan:

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

Di mana X adalah huruf drive disk Anda.

gaborous
sumber
0

Di Windows 10 saya menggunakan skrip kecil ini. Berhasil!

dim oWMP
  Set oWMP = CreateObject("WMPlayer.OCX.7")
  Set colCDROMs = oWMP.cdromCollection
  colCDROMs.Item(0).Eject
  set oWMP = nothing
EffeDB
sumber
Silakan baca pertanyaan itu lagi dengan seksama. Jawaban Anda tidak menjawab pertanyaan awal. Op menggunakan Windows 7 dan dia sudah mencoba skrip Anda dan mengatakan itu tidak berhasil.
DavidPostill
Apakah skrip ini untuk cmd, PowerShell atau Smth lain?
YakovL