Tháo thiết bị USB khỏi dòng lệnh


61

Tôi đang xây dựng một tập lệnh sao lưu cho Windows 7 và hành động cuối cùng tôi muốn nó thực hiện là "gỡ bỏ" ổ đĩa USB mà nó đang sao lưu một cách an toàn. Tôi có ấn tượng rằng việc cắm ổ đĩa vào cùng một cổng USB mọi lúc sẽ giữ nguyên DEV_ID (sửa tôi nếu tôi sai). Với một dòng lệnh (hoặc PowerShell), làm cách nào tôi có thể yêu cầu Windows tự động gỡ bỏ phần cứng một cách an toàn mà không cần người dùng nhập liệu?

Cũng như một người giữ chỗ, các hệ điều hành khác có thể có cách này cũng rất tuyệt để biết.


5
Tôi phải thừa nhận sự thất vọng bởi một số các “câu trả lời” dưới đây mà rõ ràng không hiểu những gì đang được hỏi và được cung cấp tùy chọn mà rõ ràng là vô dụng đối với nhiệm vụ tự động hóa như asked.` ಠ_ಠ
Synetech

> Tôi có ấn tượng rằng việc cắm ổ đĩa vào cổng USB CÙNG mọi lúc sẽ giữ nguyên DEV_ID, hãy sửa cho tôi nếu tôi sai. Đúng rồi. Windows coi một ổ đĩa và cổng được cắm vào như một cặp nhận dạng. Bằng cách cắm nó vào một cổng khác (trong đó nó chưa bao giờ được cắm), bạn sẽ kích hoạt chức năng cài đặt trình điều khiển của Windows. Tồi tệ hơn, nếu bạn đã gán một ký tự ổ đĩa không liên tiếp cho âm lượng, thì việc cắm nó vào một cổng mới sẽ không giữ lại chữ cái đó và nó sẽ nhận được chữ cái có sẵn tiếp theo và bạn phải gán lại một chữ cái theo cách thủ công.
Synetech

1
(Thật kỳ lạ, nếu bạn cắm một ổ đĩa vào một cổng và để Windows cài đặt trình điều khiển cho nó, sau đó gán một ký tự ổ đĩa không liên tiếp cho nó, sau đó rút phích cắm ra một ổ đĩa khác có cùng kiểu, kiểu, và kích thước, sau đó Windows sẽ xử lý chính xác như thể bạn đã cắm lại ổ đĩa trước đó.)
Synetech

Bạn có thể cập nhật tiêu đề cho chính xác. Tôi đang tìm kiếm câu trả lời về việc loại bỏ "thiết bị" USB chứ không phải "ổ đĩa USB".

Câu trả lời:


32

RemoveDrive đã phục vụ tôi tốt trong quá khứ


4
removerive \ x64> RemoveDrive.exe f: -L là mã dành cho những người đang vội
fedmich

Điều này đã kết thúc làm việc cho tôi. Điều thú vị là một WqlEventQuery tôi đã nối dây vẫn chờ để kích hoạt cho đến khi bạn rút ổ đĩa ra một cách vật lý. Không biết nhiều về những thứ này, nhưng nó làm tôi ngạc nhiên. Không xảy ra vấn đề với tôi trong trường hợp này.
samuelesque

1
RemoveDrive là tốt, nhưng vấn đề là nó thực sự loại bỏ toàn bộ ổ đĩa. Đối với đầu đọc thẻ, thay vì chỉ đơn giản là đẩy thẻ ra (như nhấp chuột phải và chọn Eject từ Máy tính của tôi) và cho phép bạn cắm một đầu vào khác, nó sẽ loại bỏ toàn bộ đầu đọc thẻ, yêu cầu phải rút phích cắm và nạp lại vật lý cắm hoặc tệ hơn là khởi động lại nếu đầu đọc thẻ được tích hợp (có thể thực hiện thông qua phần mềm nhưng nó gây khó chịu).
Synetech

Bạn có thể chạy nó từ cygwin quá.
Kevin Sadler

65

Bên cạnh RemoveDrive của Uwe Sieber được đề cập trong câu trả lời khác, có cả đống tiện ích có thể thực hiện điều này. Một danh sách nhỏ sau đây:

  • USB Disk Ejection chủ yếu là một tiện ích dựa trên GUI nhưng có thể được sử dụng tốt như nhau từ dòng lệnh để đẩy ổ đĩa mà chương trình đang chạy hoặc bất kỳ ổ đĩa nào bằng cách chỉ định tên ổ đĩa / tên ổ đĩa (một phần), v.v. Nguồn mở và miễn phí.

    Đầu phun đĩa USB

  • USB Safely Remove không miễn phí nhưng nó là tiện ích loại bỏ đĩa trên steroid, với rất nhiều tính năng nâng cao , bao gồm cả hỗ trợ dòng lệnh . Zentimo là anh trai lớn của nó, với thậm chí nhiều tính năng .

    Tháo USB an toàn

  • DevCon của Microsoft là phiên bản dòng lệnh của Trình quản lý thiết bị. Bên cạnh phiên bản Win2K / XP gốc có sẵn từ trang KB, còn có các bản phát hành mới hơn (cả 32 và 64 bit) có sẵn từ nhiều nguồn MS khác nhau như được đề cập trong bài viết này để tìm DevCon.exe . Có thể tìm thấy DevCon.exe cho Windows 7 (và có thể cả Windows 8) trong Bộ điều khiển Windows thích hợp (WDK) , như được đề cập trong luồng này (cũng chứa các liên kết tải xuống để thực thi được trích xuất ).

    devcon status *hoặc devcon hwids *hoặc devcon findall =usb(đối với danh sách nhỏ gọn hơn) sẽ cho bạn biết ID phần cứng của thiết bị. Ví dụ:

    USB \ VID_0781 & PID_7113 \ 0001162825
    Tên: Trình
    điều khiển thiết bị lưu trữ USB lớn đang chạy.

    Sau đó, bạn có thể thử xóa thiết bị bằng devcon remove "USB\VID_0781&PID_7113"(ký tự đại diện như * được cho phép, nhưng hãy cẩn thận hoặc cuối cùng bạn có thể xóa hoàn toàn thứ khác!)


Có người đã hỏi " Có lệnh nhắc DOS (cmd.exe từ Win7) để đẩy ổ đĩa ngón tay cái không? " Không may bị đóng như một bản sao của chuỗi này. Tuy nhiên, câu hỏi là về việc loại bỏ các ổ USB trong khi trong Windows Recovery Console / System Recovery Command Prompt , do đó, không chắc bất kỳ tiện ích nào ở trên sẽ có ích. Trong tình huống như vậy, phương pháp sau sử dụng Diskpart sẽ hoạt động:

  1. Nhập diskpartvà đợi dấu nhắc của phần mềm ( DISKPART>)

  2. Thể loại list volume

  3. Lưu ý cẩn thận số lượng âm lượng của ổ USB (sử dụng các thuộc tính được liệt kê như ký tự ổ đĩa, nhãn, loại và kích thước để được trợ giúp)

  4. Loại select volume <number>, <number>số âm lượng được ghi chú ở trên

    Đĩa

  5. Thể loại remove all dismount

  6. Nhập exitđể thoát Diskpart

Bây giờ bạn có thể tháo ổ USB của mình một cách an toàn mà không sợ mất dữ liệu.


1
Cảm ơn vì đã dành thời gian trả lời câu hỏi của tôi ngay cả sau khi SU đóng nó. Tôi đã tiếp tục và hành động theo đề nghị của Jared Tritsch và xóa ổ đĩa chỉ bằng cách xóa nó. Khi tôi vận hành lại máy tính xách tay, tôi sẽ thử nghiệm với DISKPART. Đây là liên kết đến Thông số kỹ thuật của Microsoft cho DISKPART. technet.microsoft.com/en-us/l
Library / bb490893.aspx

2
@zundarz: Bạn được chào đón! Chính sách Xóa mặc định trong Windows cho các thiết bị di động là Loại bỏ nhanh , vô hiệu hóa ghi bộ nhớ đệm và cho phép một người xóa ổ đĩa mà không cần phải gỡ bỏ nó một cách an toàn trước. Xem ảnh chụp màn hình này để biết thêm. Do đó, đề xuất của Jared về việc kéo ổ đĩa thường không gây mất dữ liệu nếu các ổ di động cũng được xử lý theo cách tương tự trong Recovery Console. Tuy nhiên, để yên tâm, tôi luôn cẩn thận tháo từng ổ một cách an toàn trước khi rút nó ra. Có thể là một giả dược, nhưng giữ cho tôi khỏi lo lắng. :)
Karan

PS Hãy cẩn thận với Diskpart - nó mạnh mẽ và do đó khá nguy hiểm. Lý do tôi sử dụng nó để tháo gỡ ổ đĩa là vì nó có sẵn từ cả Recovery Console của XP và Tùy chọn khôi phục hệ thống / Dấu nhắc lệnh của Vista / 7.
Karan

Tôi đã thử sử dụng Diskparttrong khi ở chế độ Windows bình thường. Đây là thông điệp tôi nhận được sau khi thực hiện bước 5 ở trên. "DiskPart đã xóa thành công ký tự ổ đĩa, nhưng máy tính của bạn cần được khởi động lại trước khi các thay đổi có hiệu lực. Diskpart đã tháo thành công âm lượng." Tôi đã thử sử dụng nó trên phương tiện di động (thẻ SD) thay vì thiết bị di động (như đầu đọc thẻ SD hoặc ổ flash USB). Đèn báo LED trên đầu đọc không tắt nhưng nó vẫn sáng (tức là nó dừng nhấp nháy như thỉnh thoảng khi thẻ SD chỉ nằm trong đó). Vì vậy, tôi đoán nó an toàn để loại bỏ sau đó.
Samir

3
Để hoàn tác các remove all dismountlệnh bạn phải sử dụng mountvollệnh. Để biết thêm thông tin xem thư viện Technet ở đây và cũng ở đây . Sau khi sử dụng, mountvolbạn phải khởi động lại để các thay đổi có hiệu lực. Ngoài ra, bạn cũng có thể sử dụng Quản lý đĩa để gán ký tự ổ đĩa mới.
Samir

17

Để trả lời cho câu hỏi này ... Bạn không cần công cụ của bên thứ ba.

Với Dòng lệnh (hoặc PowerShell), làm cách nào tôi có thể yêu cầu Windows tự động gỡ bỏ phần cứng mà không cần người dùng nhập liệu?

Chạy lệnh này: RunDll32.exe shell32.dll,Control_RunDLL hotplug.dll để hiển thị hộp thoại Safely Remove Phần cứng:

Hộp thoại loại bỏ phần cứng an toàn


4
Bạn có thể mô tả những gì nó làm?
Luke Luke REINSTATE MONICA của Canada

1
khởi chạy loại bỏ an toàn cho usb
climenole

11
Tôi vẫn không cần phải bấm vào cái gì đó chứ?
Luke Luke REINSTATE MONICA của Canada

2
Điều này khá tuyệt, nhưng thật không may cho mục đích tự động hóa, nó không tốt hơn bất kỳ đề xuất nào của Karan.
Synetech

1
kiểm soát hotplug.dll , tức là không có _RunDLL không hoạt động với tôi trên Vista SP2
user66001

2

Vì nó là một thiết bị dự phòng, có nghĩa là nó là một thiết bị lưu trữ, do đó, nó có thể được thực hiện từ powershell - chỉ cần thay thế X: bằng ký tự ổ đĩa bạn muốn:

$driveEject = New-Object -comObject Shell.Application
$driveEject.Namespace(17).ParseName("X:").InvokeVerb("Eject")

1
Tôi đã thấy giải pháp này trên serverfault cũng như trên stackoverflow , nhưng dường như tôi không thể làm cho nó hoạt động với ổ cứng gắn ngoài của mình. Không có thông báo lỗi, nó không làm gì cả. Sử dụng "F:"hoặc "F:\"không tạo ra sự khác biệt, cũng như chạy PowerShell với tư cách quản trị viên. Gỡ bỏ an toàn thông qua thanh tác vụ đang hoạt động. Tôi đang làm gì sai?
flolilo

Lệnh powershell thực tế không trả về bất kỳ thông báo lỗi (văn bản màu đỏ) nào?
Overmind

Nếu tôi rút phích cắm F: \ và chạy lệnh, tôi sẽ gặp lỗi rằng tôi không thể chạy một phương thức là NULL (thông báo bằng tiếng Đức, vì vậy tôi không hoàn toàn chắc chắn rằng mình đã dịch đúng). Nếu tôi chạy các lệnh với F: \ đã cắm, thì không có thông báo nào cả - $errorcũng trống. Tôi đang chạy PowerShell 5.1 trên Win10 Pro. F: \ là một ổ cứng USB ngoài chỉ có một phân vùng (F :) - nó có thể được gỡ bỏ an toàn thông qua thanh tác vụ mà không gặp vấn đề gì.
flolilo

Thật thú vị, khi tôi sử dụng một ổ đĩa USB (cũng với một phân vùng), nó hoạt động hoàn hảo. Cả hai đều được kích hoạt Better performancetrong chính sách loại bỏ của họ, mặc dù điều đó dường như không có sự khác biệt nào (USB Pendrive hoạt động với cả hai cài đặt, USB HDD thì không). Một ổ đĩa thứ hai mà tôi sở hữu cũng không muốn bị đẩy ra thông qua lệnh PowerShell. Hoạt động: Transcend JetFlash 700 (16GB, FAT32), Không hoạt động: Seagate Expansion Portable 2015 (4TB, NTFS), Sandisk Extreme (32GB, exFAT). Tất cả đã thử nhiều lần trên cùng một cổng USB. Một lần nữa, loại bỏ an toàn thông qua biểu tượng thanh tác vụ luôn hoạt động.
flolilo

@flolilolilo tôi có cùng một vấn đề ...
Ploni

1

Theo bài viết 7tutorials này , bạn có thể kích hoạt rút phích cắm an toàn bằng cách đặt "Xóa nhanh". Điều này sẽ vô hiệu hóa bộ nhớ đệm ghi trên mỗi thiết bị , trong đó tác động hiệu suất là "không đáng kể"? Các bước của họ cho Windows 7 dưới đây.

( Chỉnh sửa ) Theo bài viết howtogeek này , bạn vẫn nên cẩn thận khi cài đặt "Xóa nhanh". Điều này sẽ vô hiệu hóa ghi bộ đệm, và do đó sẽ ngăn ngừa hầu hết các vấn đề. Nhưng một số chương trình vẫn có thể viết nội dung 'trực tiếp', cho đến khi được loại bỏ / xóa rõ ràng. ( Kết thúc chỉnh sửa )

Các bước:

  • cắm thiết bị vào ổ USB
  • mở Trình quản lý thiết bị
  • mở rộng ổ đĩa
  • nhấp chuột phải vào ổ đĩa di động của bạn, ví dụ: "USB2.0 Flash Disk USB Device."
  • chọn Thuộc tính
  • bấm vào tab Chính sách
  • bật "Xóa nhanh" (tắt "Hiệu suất tốt hơn")

( Chỉnh sửa ) Lưu ý rằng bạn cần sử dụng Trình quản lý thiết bị để thay đổi cài đặt, không thể thực hiện được từ Trình khám phá tệp. (Ít nhất là trong phiên bản Windows 10 của tôi.)


1
Điều này nghe có vẻ là một ý tưởng tuyệt vời cho các ổ đĩa sao lưu! Có vẻ như đây là cài đặt mặc định (Ít nhất là trên của tôi Seagate BUP Slim BK USB External Drive).
Arvo Bowen

1
Các thiết bị có bộ đệm ghi được kích hoạt không thể tháo rời nhanh.
Overmind

1
Có thể đặt cài đặt này trên toàn cầu để áp dụng cho bất kỳ và tất cả bộ lưu trữ USB được gắn trong tương lai không?
DuckMaestro
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.