Je fais un programme pour améliorer les performances du PC et l'une de ses fonctions est la défragmentation. Mais si ce script est lancé, un SSD ne sera pas bon. Est-ce que quelqu'un sait comment je peux détecter si elles utilisent un SSD ou un disque dur pour que je puisse le programmer pour passer cette étape si nécessaire. Je pensais peut-être à un test de vitesse mais je ne sais pas si cela serait fiable. Est-ce que quelqu'un sait comment je pourrais le faire. MerciVérification par lots si quelqu'un utilise un disque dur ou un disque SSD
Répondre
Cette information peut être obtenue à partir de la commande wmic
; par exemple:
C:\> wmic logicaldisk get Description,DeviceID
Description DeviceID
Local Fixed Disk C:
Local Fixed Disk D:
CD-ROM Disk E:
Removable Disk G:
Le fichier batch ci-dessous utilisent cette méthode pour identifier les lecteurs qui sont HDD:
@echo off
for /F "tokens=1-4" %%a in ('wmic logicaldisk get Description^,DeviceID') do (
if "%%a %%b %%c" equ "Local Fixed Disk" (
echo Drive %%d is a HDD
)
)
Par exemple:
C:\> test.bat
Drive C: is a HDD
Drive D: is a HDD
EDIT: Deux nouveau disque méthodes d'identification ajoutées
Il semble que la méthode précédente ne soit pas fiable dans tous les cas.Ci-dessous, il y a deux nouvelles méthodes plus précises: une positive qui vérifie si un disque dur est un disque dur basé sur LogicalDisk/DriveType = 3, et une négative qui vérifie si un disque donné est pas un un disque dur basé sur le nombre de partitions que les disques IDE ont (diskdrive/InterfaceType = IDE):
@echo off
echo Drive type identification using LogicalDisk/DriveType=3:
for /F "tokens=1-2" %%a in ('wmic LogicalDisk get DeviceID^,DriveType') do (
if "%%b" equ "3" (
echo Drive %%a is a HDD
)
)
echo/
echo Drive type identification using DiskDrive/InterfaceType=IDE:
set partitions=0
for /F "tokens=1-2" %%a in ('wmic DiskDrive get InterfaceType^,Partitions') do (
if "%%a" equ "IDE" set /A partitions+=%%b
)
set drives=BCDEFGHIJKLMNOPQRSTUVWXYZ
call set lastIDEdrive=%%drives:~%partitions%,1%%:
echo Last IDE interface logical drive (B:=none): %lastIDEdrive%
for /F %%a in ('wmic LogicalDisk get DeviceID') do (
if "%%a" gtr "%lastIDEdrive%" (
echo Drive %%a is NOT a HDD
)
)
Par exemple:
C:\> test.bat
Drive type identification using LogicalDisk/DriveType=3:
Drive C: is a HDD
Drive D: is a HDD
Drive type identification using DiskDrive/InterfaceType=IDE:
Last IDE interface logical drive (B:=none): F:
Drive G: is NOT a HDD
Cela fait-il la différence entre un disque dur et un disque SSD? Je ne pense pas qu'il soit réellement possible de dire de façon fiable de la lecture que j'ai faite. – foxidrive
@foxidrive: Comme je comprends la demande, l'OP veut faire quelque chose _seulement si le disque est HDD_, donc il n'est pas nécessaire d'identifier si le disque est un SSD (ou un CD-ROM, etc.). Bien sûr, seul le PO peut effacer ce point, mais même dans ce cas, je pense que le seul cas où 'wmic' rapporte un" Disque amovible "est quand il s'agit d'un SSD. – Aacini
L'OP veut défragmenter les disques, sauf les modèles SSD. Il a donc besoin d'identifier si la lettre de lecteur est un SSD. – foxidrive
Réponse courte: il n'y a pas de manière fiable.
Réponse longue:
La question "Is there any way of detecting if a drive is a SSD" propose quelques heuristiques, mais aucun d'entre eux semble fiable.
Cette question a également été posée on Lockergnome, mais sur mon système, je ne peux pas dire à mon SSD à partir d'un disque dur en exécutant MSInfo32. La réponse est de rechercher le modèle de disque et de google pour cela. Ce n'est probablement pas ce que vous voulez faire à partir d'un fichier batch.
Ce post on the OCZ forum suggère de rechercher une rotation de 0. Mais comme Flimm commented, il ment parfois.
Un Wordpress blog post suggère d'utiliser le taux de transfert de lecture aléatoire, mais encore une fois, c'est heuristique. Un système RAID peut échapper à cette détection.
-
Mise à jour concernant la réponse de @Aacini, ce qui prouve que cela ne fonctionne pas:
Les rapports de script:
D:\>test-hdd.bat
Drive type identification using LogicalDisk/DriveType=3:
Drive C: is a HDD
Drive D: is a HDD
Drive E: is a HDD
Drive F: is a HDD
Drive type identification using DiskDrive/InterfaceType=IDE:
Last IDE interface logical drive (B:=none): F:
Drive G: is NOT a HDD
Situation réelle:
Drive C: is a SSD (logical partition 1 of SSD 1)
Drive D: is a SSD (logical partition 2 of SSD 1)
Drive E: is a SSD (only partition of SSD 2)
Drive F: is a HDD
Drive G: is NOT a HDD (it's a USB stick)
smartmontools est un outil puissant de ligne de commande, vous pouvez utiliser sur lot
http://sourceforge.net/projects/smartmontools/?source=directory
c:\>smartctl -i sda
smartctl 6.4 2015-06-04 r4109 [x86_64-w64-mingw32-win7-sp1] (sf-6.4-1)
Copyright (C) 2002-15, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: HGST Travelstar 5K1000
User Capacity: 1,000,204,886,016 bytes [1.00 TB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
Rotation Rate: 5400 rpm
Form Factor: 2.5 inches
Device is: In smartctl database [for details use: -P show]
ATA Version is: ATA8-ACS T13/1699-D revision 6
SATA Version is: SATA 2.6, 6.0 Gb/s (current: 3.0 Gb/s)
Local Time is: Thu Oct 22 20:27:40 2015
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
c:\>smartctl -i sdb
smartctl 6.4 2015-06-04 r4109 [x86_64-w64-mingw32-win7-sp1] (sf-6.4-1)
Copyright (C) 2002-15, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Sector Size: 512 bytes logical/physical
Rotation Rate: Solid State Device
Device is: In smartctl database [for details use: -P show]
SATA Version is: SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Thu Oct 22 20:28:01 2015
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
→ _ → SSD:
c:\>smartctl -a c:
smartctl 6.4 2015-06-04 r4109 [i686-w64-mingw32-win7(64)-sp1] (sf-6.4-1)
Copyright (C) 2002-15, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: SandForce Driven SSDs
Device Model: KINGSTON SV300S37A120G
User Capacity: 120,034,123,776 bytes [120 GB]
Sector Size: 512 bytes logical/physical
Rotation Rate: Solid State Device
j'ai écrit le code javascript suivant. J'avais besoin de savoir si j'avais un disque SSD et si c'était le disque de démarrage.
function main()
{
var retval= false;
// MediaType - 0 Unknown, 3 HDD, 4 SSD
// SpindleSpeed - -1 has rotational speed, 0 has no rotational speed (SSD)
// DeviceID - 0 boot device
var objWMIService = GetObject("winmgmts:\\\\.\\root\\Microsoft\\Windows\\Storage");
var colItems = objWMIService.ExecQuery("select * from MSFT_PhysicalDisk");
var enumItems = new Enumerator(colItems);
for (; !enumItems.atEnd(); enumItems.moveNext())
{
var objItem = enumItems.item();
if (objItem.MediaType == 4 && objItem.SpindleSpeed == 0)
{
if (objItem.DeviceID == 0)
{
retval=true;
}
}
}
if (retval)
{
WScript.Echo("You have SSD Drive and it is your boot drive.");
}
else
{
WScript.Echo("You do not have SSD Drive");
}
return retval;
}
main();
- 1. arrêter un disque dur
- 2. Mise en cache SSD Linux pour disque dur
- 3. WMI: Comment distinguer entre un disque dur « disque local » interne et un disque dur externe « disque local »
- 4. Comment détecter si un lecteur spécifique est un disque dur?
- 5. Powershell et wmi, comment mapper un disque logique/volumes à un disque dur ou vice versa?
- 6. Indique si un chemin fait référence à un disque SSD avec WinAPI
- 7. Extraction du conteneur Docker sur un disque dur amorçable
- 8. Rampant un disque dur avec Ruby/Unix
- 9. Comment déterminer par programme comment un DVD ou un disque dur est connecté - Maître ou Esclave?
- 10. Comment formater complètement un disque dur?
- 11. powershell copie-article tous les fichiers de disque dur à un autre disque dur
- 12. comment TRIM un bloc sur le disque SSD?
- 13. Format disque dur avec javascript
- 14. Accès direct au disque dur?
- 15. Bootstrap Accès au disque dur
- 16. Comment puis-je simuler les performances normales du disque dur sur mon Mac à SSD?
- 17. Insérer ou ignorer un disque
- 18. Comment éviter le débordement du disque dur
- 19. Vérification automatique du disque
- 20. Enregistrer le chemin du fichier de traitement par lots sur le disque dur local
- 21. Serveur VMWare: Disque dur virtuel Type
- 22. Mise en mémoire cache mySQL - Mémoire ou disque dur?
- 23. Comment partitionner un disque dur en utilisant C#
- 24. Crypter votre disque dur en C#
- 25. Sauvegarde par lots d'un disque dur sans modification des temps d'accès C#
- 26. Calcul de la capacité du disque dur
- 27. MS Access-VBA _ Enregistrer un rapport sur le disque dur
- 28. Copie scp à partir d'un disque dur via un serveur
- 29. Comment afficher un tableau de doubles sur le disque dur?
- 30. Visual Studio 2008 sur un disque dur externe?
Je vous recommande de demander cela sur SuperUser. –