Bir CD'yi cmd üzerinden nasıl çıkarabilirim?


25

Cd sürücüsünü cmd kullanarak çıkarmaya çalışıyorum.
Ancak, güdük oldum. İnternette arama yaparken sadece bu cevabı buldum:

eject D: 

ve benzer bir cevap

eject D: /I

İkisi de çalışmıyor.

EDIT
Şimdi insanlar bu cevabı süper kullanıcı olarak buldular.

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

Ancak bir hata alıyorum:

colCDROMS.Item bir iç veya dış komut, çalıştırılabilir program veya toplu iş dosyası olarak tanınmıyor.


Im windows 7 çalıştırıyorum, bu yüzden xp'den toplu dosyalar çalışmayabilir.

Ayrıca kafam karıştığından beri bu konuda bir Meta sorusu soruyorum ve etiket batch-filesoruların konu dışı kaldığı zamandan söz etmiyor .
AStopher

XP versiyonu bana problem veriyor.


2
Bu kesinlikle Toplu dosya komut dosyası değil; VBS
Kanadalı Luke,

Yanıtlar:


20

Bir cd dosyasını bir toplu iş dosyası ile çıkarabilirsiniz (bu, vbscript'in bir parçasıdır)

@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

Bu benim işim değil, yığma akış topluluğunda buldum:

Mesaj Bağlantısı: CD Tepsisini Çıkarmak için Toplu Komut Satırı?
Cevap Yazar: Bruno
Tarih Cevaplandı: 10 Şub 2015


14
Nereden aldığınızı belirtmeniz gerekiyor: Bu benim işim değil, çevrimiçi buldum. . Hatırlayamıyorsanız, telif hakkı nedenleriyle cevabınızı silmeniz gerekir.
AStopher

Bu cevap Meta'da tartışılıyor: Atfetmeyen cevaplarla nasıl başa çıkacağız?
AStopher

6
Teknik olarak konuşursak, bu bir VBS çözümüdür, toplu iş dosyası çözümü değildir.
Dan Henderson,

4
Daha önceki yorumumu açıklığa kavuşturmak için, bunun, belirtildiği gibi soru için uygun bir cevap olmadığını söylemek istemiyorum, sadece açılış satırında "Bir toplu iş dosyası ile bir cd çıkarabilirsiniz" satırının biraz değiştirilmesi gerektiğini söylemek istemiyorum. Sistemimin yapılandırması toplu iş dosyalarının yürütülmesini destekliyor ancak VB komut dosyalarının yürütülmemesini destekliyorsa, bu cevap benim için çalışmayacak.
Dan Henderson,

Aralık 2016'dan itibaren, Windows 10'daki Windows Defender çalıştırıldığında oluşturulan betiği virüs olarak algılayacak
hooby3dfx

18

Sen kullanabilirsiniz Shell.ApplicationCOM nesnesinin InvokeVerbyöntemini. Bir cmd komut isteminden, bir PowerShell tek gömleğini bu şekilde kötüye kullanabilirsiniz:

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

COM nesnesini çağırmak için Windows Komut Dosyası Sistemi Ana Bilgisayarını (VBScript / JScript) da kullanabilirsiniz. İşte melez bir Batch + Jscript betiği kullanarak bir örnek (.bat uzantılı kaydet):

@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');

Komut dosyanızın CD sürücüsünün sürücü harfini algılamasını tercih ederseniz, bu da ayarlanabilir. İşte açıklayıcı olmayan değerlerin bazılarını açıklayan yorumların bulunduğu daha eksiksiz bir versiyon.

@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

Komut satırı CD-çıkarma oneliner:

Bir yarasa dosyasında ya da doğrudan Windows 8'de cmdilk çalıştırıldıktan sonra çalıştı.wmplayer

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

4

WMPlayer.OCX.7Virüsten koruma programlarının çoğunun kullanılması şaşırtıcı olacaktır ve ortam yürütücüsü olmadan gelen bazı Windows sürümleri vardır. İşte shell.application ve invokeVerb işlevinin bir yolu:

Bu .batuzantı ile kaydedin :

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

Gibi kullanabilirsiniz (daha fazla bilgi için -)

call eject.bat *

Bununla bile eject.bat *bana söyler no cd drive found with letter d:. Bu neden olabilir? Sürücüyü sağ tıklayıp "Çıkart" ı seçersem, çıkar.
Brad Turek

@BradTurek - (İngilizce değilse) dili olabilir. Veya cd sürücüler üzerinde sağ tıklamayla ilişkili özel eylemleriniz varsa. CD / DVD aygıtına sağ tıklarsanız çıkarma işlemi alttan dördüncü sırada olmalıdır (varsayılan yer).
npocmaka

0

Üçüncü taraf bir uygulamayı kullanabiliyorsanız , Nirsoft'un nircmd'sini kullanabilirsiniz . Denediğim tüm bilgisayarlarda (Windows XP'den Windows 8'e), aşağıdakileri kullanarak diski çıkarabilirim:

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

X disk sürücünüzün harfi.


0

Windows 10'da bu küçük betiği kullanıyorum. İşe yarıyor!

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

Lütfen soruyu tekrar dikkatlice okuyunuz. Yanıtınız yok değil orijinal soruya cevap. Op, Windows 7 kullanıyor ve zaten size komut dosyası çalıştı ve işe yaramadığını söyledi.
DavidPostill

Bu komut dosyası cmd, powershell veya başka bir şey için mi?
YakovL
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.