如何知道硬盘是固态硬盘(SSD)?

4

我需要创建一个 T 卷,T 已经创建成功,但是如果磁盘是 SSD,我还需要创建一个新的 U 卷,该怎么做呢?

如何通过批处理命令知道我的硬盘是否为 SSD?

[...]
set /a VOL_SIZE= %MINSIZE_MB% /2
set VOL_TYPE=simple
if %NDISK% GTR 1 set VOL_TYPE=stripe

echo create volume %VOL_TYPE% size=%VOL_SIZE% disk=%DISKLIST%   >>%CMD_FILE%
echo Format fs=NTFS quick                                       >>%CMD_FILE%
echo assign letter=T                                            >>%CMD_FILE%


::if I'm not a SSD goto :noSSD

echo create volume %VOL_TYPE% disk=%DISKLIST%                   >>%CMD_FILE%
echo Format fs=NTFS quick                                       >>%CMD_FILE%
echo assign letter=U                                            >>%CMD_FILE%

:noSSD
[...]

最好的问候。

2个回答

7
作为的替代方案,您也可以尝试使用
打开命令提示符窗口,粘贴以下行,并按ENTER键。
For /F Tokens^=6Delims^=^" %G In ('^""%SystemRoot%\System32\wbem\WMIC.exe" /NameSpace:\\root\Microsoft\Windows\Storage Path MSFT_PhysicalDisk Where "MediaType='4' And SpindleSpeed='0'" Get Model /Format:MOF 2^>NUL^"')Do @Echo %G is an SSD

这将访问与PowerShell的Get-PhysicalDisk相同的信息。首先检查MediaType属性。该属性返回三个可能的值:0 (未指定)3 (HDD);和4 (SSD)。为了进一步保证安全,我检查是否存在0的主轴速度,因为SSD中没有移动部件,并返回通过两个检查的任何型号名称。

你应该有接受,用户接受而不测试。他们正在使用Windows 7或Server 2008R2,而这种方法或在cmd中使用Diskpart是唯一有效的方法。 - Ben Personick
这需要 Windows 10 吗?在我的 Windows 7 Enterprise 机器上它显示“无效类”... - aschipfl
1
我在发布时无法测试@aschipfl。此后,我已经设法在三个不同的系统上尝试了它。在Windows Vista Home Premium上,它无法工作,输出错误“无效的命名空间”。在Windows 7 Home Premium单元上,它也以完全相同的消息失败。但是,在Windows 10 Professional单元上,它确实像广告中所说的那样工作,但我不能确定操作系统版本是决定性原因还是版本,而且由于您的Windows 7版本输出了不同的错误消息,我不想猜测。 - Compo
感谢您的测试!起初我也收到了相同的错误“无效的命名空间”,看来在另一个测试中删除“/NameSpace”部分后,我复制了错误的消息。在我的Windows 10笔记本电脑上它可以工作... - aschipfl

3

在命令提示符中,您可以输入以下命令来调用PowerShell,并传递命令,如果磁盘属于“SSD”类型,则将返回该命令:

powershell.exe "(get-physicaldisk).MediaType"

根据phuclv的建议,在批处理文件中使用此命令的返回值的最简单方法是:

powershell.exe "exit ((get-physicaldisk).MediaType) -ne 'SSD'" && echo SSD

SSD存在时的语句解释:

  • ((get-physicaldisk).MediaType) - 评估为“SSD”
  • 'SSD' -ne SSD' - 评估为False(-ne是不相等运算符)
  • exit 并使用逻辑false(False)- 使PowerShell退出而不将CMD的%ERRORLEVEL%设置为非零
  • && - 是CMD运算符,当第一个命令成功(当%ERRORLEVEL%为零)时执行第二个命令

我可以使用PowerShell,但它无法识别该命令。 - Awesome JSF
如果 PowerShell 的版本较旧,可能可以更新它,我看到在 Windows 7 上可以将其更新为 PowerShell 5。 如果这没有帮助,可以在 https://social.technet.microsoft.com/Forums/ie/en-US/6816a942-54e3-4796-adb4-1bce121bfac7/getphysicaldisk-the-term-getphysicaldisk-is-not-recognized-as-the-name-of-a-cmdlet?forum=winserverpowershell 找到其他一些提示-它们依赖于从型号名称中解析字符串“SSD”,但并不是所有型号都在型号名称中具有该字符串,尽管它们是固态硬盘。 - Ivan Golović
2
你甚至不需要将结果存储到临时文件中,可以使用 for /F 读取输出。但最好的方法是直接从 PowerShell 返回比较结果:powershell.exe "exit ((get-physicaldisk).MediaType) -ne 'SSD'" && echo SSD - phuclv
这个功能在Windows 7/2008R2上无法使用,你需要至少2012 R2才能运行此命令,这是操作系统的限制,而不是PowerShell版本问题。 - Ben Personick
你可以通过CMD使用Diskpart和/或WMIc进行一些操作来获取此信息。 - Ben Personick
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接