Làm thế nào tôi có thể đẩy CD qua cmd?


24

Tôi đã cố gắng đẩy ổ đĩa cd bằng cách sử dụng cmd.
Tuy nhiên, tôi đã bối rối. Tìm kiếm trên internet, tôi chỉ tìm thấy câu trả lời này:

eject D: 

và một câu trả lời tương tự

eject D: /I

Cả hai đều không hoạt động.

EDIT
Bây giờ mọi người đã tìm thấy câu trả lời này trên superuser,

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

Tuy nhiên, tôi gặp lỗi:

colCDROMS.Item không được công nhận là một lệnh nội bộ hoặc bên ngoài, chương trình có thể hoạt động hoặc tệp bó.


Tôi đang chạy windows 7, vì vậy các tệp bó từ xp có thể không hoạt động.

Tôi đang hỏi một câu hỏi Meta về vấn đề này vì tôi cũng bối rối và thẻ không đề cập đến khi batch-filecâu hỏi trở nên lạc đề.
AStopher

Phiên bản xp đang cho tôi vấn đề.


2
Đó chắc chắn không phải là tập lệnh Batch-file; đó là VBS
Luke Luke REINSTATE MONICA của Canada

Câu trả lời:


19

Bạn có thể đẩy một đĩa cd với một tệp bó (đây là một phần 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

Đây không phải là công việc của tôi, tôi đã tìm thấy nó trong cộng đồng stackoverflow:

Liên kết bài viết: Dòng lệnh hàng loạt để đẩy khay CD?
Trả lời Tác giả: Bruno
Ngày trả lời: 10 tháng 2 năm 2015


14
Bạn cần nói rõ bạn lấy nó từ đâu: Đây không phải là công việc của tôi, tôi đã tìm thấy nó trực tuyến. . Nếu bạn không thể nhớ, bạn cần xóa câu trả lời của mình vì lý do bản quyền.
AStopher


6
Về mặt kỹ thuật, đây là một giải pháp VBS, không phải là một giải pháp tệp bó.
Dan Henderson

4
Để làm rõ nhận xét trước đây của tôi, tôi không có ý nói rằng đây không phải là một câu trả lời thích hợp cho câu hỏi như đã nêu, chỉ có lẽ là dòng mở đầu "Bạn có thể đẩy một đĩa cd với một tệp bó" nên được sửa đổi một chút. Nếu cấu hình hệ thống của tôi hỗ trợ thực thi các tệp bó nhưng không phải là tập lệnh VB, câu trả lời này sẽ không hoạt động với tôi.
Dan Henderson

Kể từ tháng 12 năm 2016, Windows Defender trên Windows 10 sẽ phát hiện tập lệnh được tạo là vi-rút khi chạy
hooby3dfx

18

Bạn có thể sử dụng phương thức Shell.Applicationcủa đối tượng COM InvokeVerb. Từ dấu nhắc cmd, bạn có thể lạm dụng một lớp lót PowerShell:

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

Bạn cũng có thể sử dụng Windows Scripting Host (VBScript / JScript) để gọi đối tượng COM. Dưới đây là một ví dụ sử dụng tập lệnh Batch + Jscript lai (lưu nó với phần mở rộng .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');

Nếu bạn muốn tập lệnh của mình phát hiện ký tự ổ đĩa cho ổ đĩa CD, thì cũng có thể được sắp xếp. Đây là một phiên bản hoàn chỉnh hơn với các bình luận giải thích một số giá trị không tự giải thích.

@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

Dòng lệnh CD-eject oneliner:

Trong một tập tin bat hoặc trực tiếp trong cmdnày hoạt động sau lần chạy đầu tiên wmplayertrên Windows 8:

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

4

Sử dụng WMPlayer.OCX.7sẽ làm giật mình hầu hết các chương trình chống vi-rút và có một số phiên bản cửa sổ đi kèm mà không có trình phát phương tiện. Đây là một cách với hàm shell.application và invokeVerb:

lưu cái này với .batphần mở rộng:

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

Bạn có thể sử dụng nó như thế nào (để biết thêm -)

call eject.bat *

Ngay cả với eject.bat *nó nói với tôi no cd drive found with letter d:. Tại sao điều này có thể được? Nếu tôi nhấp chuột phải vào ổ đĩa và chọn "Eject", nó sẽ phóng ra.
Brad Turek

@BradTurek - đó có thể là ngôn ngữ (nếu không phải là tiếng Anh). Hoặc nếu bạn có các hành động tùy chỉnh liên quan đến nhấp chuột phải vào ổ đĩa cd. Nếu bạn nhấp chuột phải vào hành động đẩy thiết bị CD / DVD thì thứ 4 từ dưới lên (vị trí mặc định).
npocmaka

0

Nếu bạn có thể sử dụng ứng dụng của bên thứ ba, bạn có thể sử dụng nircmd của Nirsoft . Trên tất cả các PC tôi đã thử (từ Windows XP đến Windows 8), tôi có thể đẩy đĩa ra bằng cách sử dụng:

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

Trong đó X là ký tự ổ đĩa của bạn.


0

Trong Windows 10 tôi sử dụng tập lệnh nhỏ này. Nó hoạt động!

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

Xin vui lòng đọc lại câu hỏi một cách cẩn thận. Câu trả lời của bạn không trả lời câu hỏi ban đầu. Op đang sử dụng Windows 7 và anh ấy đã thử tập lệnh của bạn và nói rằng nó không hoạt động.
DavidPostill

kịch bản này cho cmd, powershell hay smth khác?
YakovL
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.