从命令行删除 USB 设备

Can*_*uke 77 windows command-line batch-file

我正在为 Windows 7 构建一个备份脚本,我希望它执行的最后一个操作是安全地“移除”它正在备份的 USB 驱动器。我的印象是始终将驱动器插入同一个USB 端口将保持相同的 DEV_ID(如果我错了,请纠正我)。使用命令行(或 PowerShell),如何在没有用户输入的情况下告诉 Windows 安全地自动删除硬件?

就像占位符一样,其他可能有办法做到这一点的操作系统也很高兴知道。

Kar*_*ran 72

除了在另一个答案中提到的Uwe Sieber 的RemoveDrive之外,还有一大堆实用程序可以实现这一点。一个小清单如下:

  • USB Disk Ejector主要是一个基于 GUI 的实用程序,但也可以很好地从命令行使用,以通过指定驱动器号/(部分)驱动器名称/挂载点等来弹出运行程序的驱动器或任何驱动器。免费和开源。

    U盘弹出器

  • USB Safely Remove不是免费的,但它是一个强大的磁盘删除实用程序,具有许多高级功能,当然包括命令行支持Zentimo是大哥哥,有甚至 更多 的功能

    USB 安全移除

  • 微软自己的DevCon是设备管理器的命令行版本。除了可从 KB 页面获得的原始 Win2K/XP 时代版本外,还有可从各种 MS 来源获得的较新版本(32 位和 64 位),如这篇在哪里可以找到 DevCon.exe文章中所述。可以在适当的Windows 驱动程序工具包 (WDK) 中找到适用于 Windows 7(也可能是 Windows 8)的 DevCon.exe ,如该线程中所述(其中还包含指向提取的可执行文件的下载链接)。

    devcon status *devcon hwids *devcon findall =usb(对于更紧凑的列表)应该告诉您设备的硬件 ID。例如:

    USB\VID_0781&PID_7113\0001162825
    名称:USB 大容量存储设备
    驱动程序正在运行。

    然后,您可以尝试删除设备devcon remove "USB\VID_0781&PID_7113"(允许使用 * 之类的通配符,但要小心,否则您最终可能会完全删除其他内容!)


有人问“是否有 DOS 提示(来自 Win7 的 cmd.exe)命令来弹出拇指驱动器? ”不幸的是,它作为该线程的副本而关闭。但是,问题是关于在Windows 恢复控制台/系统恢复命令提示符中弹出 USB 驱动器,因此上述任何实用程序都不太可能有帮助。在这种情况下,使用Diskpart的以下方法应该可以工作:

  1. 键入diskpart并等待 diskpart 提示 ( DISKPART>)

  2. 类型 list volume

  3. 仔细记下 USB 驱动器的卷号(使用列出的属性,例如驱动器号、标签、类型和大小以获取帮助)

  4. 类型select volume <number>,其中<number>是上面提到的卷号

    磁盘部分

  5. 类型 remove all dismount

  6. 键入exit以退出 Diskpart

现在您应该能够安全地移除您的 USB 驱动器,而不必担心数据丢失。

  • 要[撤消](http://superuser.com/questions/599983/how-to-undo-remove-all-dismount-in-diskpart)`remove all dismount` 命令,你必须使用`mountvol` 命令。有关详细信息,请参阅 Technet 库 [此处](http://technet.microsoft.com/en-us/library/cc731985%28v=ws.10%29.aspx) 和 [此处](http://technet. microsoft.com/en-us/library/cc772586%28v=ws.10%29.aspx)。使用 `mountvol` 后,您必须重新启动以使更改生效。或者,您也可以使用磁盘管理来分配新的驱动器号。 (4认同)
  • @zundarz:不客气!Windows 中用于可移动设备的默认 **删除策略** 是 **快速删除**,它禁用了写入缓存并允许删除驱动器而无需先安全地删除它。有关更多信息,请参阅 [此屏幕截图](http://i.stack.imgur.com/S3zET.jpg)。因此,如果在故障恢复控制台中以相同的方式处理可移动驱动器,Jared 关于猛拉驱动器的建议通常不会导致数据丢失。尽管如此,为了安心,我总是小心翼翼地在拔出每个驱动器之前安全地卸下它。可能是安慰剂,但让我不必担心。:) (2认同)

sti*_*ijn 35

RemoveDrive过去对我很有帮助

  • **removedrive\x64&gt;RemoveDrive.exe f: -L** 是代码,赶时间的人 (4认同)
  • RemoveDrive 很好,但问题是它实际上删除了整个驱动器。对于读卡器,不是简单地弹出卡(如右键单击并选择从我的电脑中弹出),并允许您插入另一个卡,它移除了整个读卡器,需要将其物理拔下并重新插入插入,或者更糟的是,如果内置读卡器,则重新启动(可以通过软件来完成,但很烦人)。 (2认同)

cli*_*ole 20

要回答这个问题......你不需要第三方的东西。

使用命令行(或 PowerShell),如何在没有用户输入的情况下告诉 Windows 安全地自动删除硬件?

运行以下命令: RunDll32.exe shell32.dll,Control_RunDLL hotplug.dll 打开安全删除硬件对话框:

安全删除硬件对话框

  • 那我还需要点击什么吗? (12认同)
  • 你能描述一下它的作用吗? (4认同)
  • 这很酷,但不幸的是,出于自动化目的,它并不比 Karan 的任何建议好。 (3认同)

Ove*_*ind 6

由于它是一个备份设备,这意味着它是一个存储设备,因此可以从 powershell 完成 - 只需将 X: 替换为您想要的驱动器号:

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

  • 我在 [serverfault](https://serverfault.com/questions/130887/dismount-usb-external-drive-using-powershell) 以及 [stackoverflow](https://stackoverflow.com/ questions/40285581/safely-remove-usb-drive),但我似乎无法让它与我的外部硬盘一起工作。没有错误消息,它什么也没做。使用“F:”或“F:\”没有什么区别,以管理员身份运行 PowerShell 也没有什么区别。通过任务栏安全删除正在工作。我究竟做错了什么? (2认同)