|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Определение всех букв одного физического диска |
|
|
CMD/BAT - [решено] Определение всех букв одного физического диска
|
Ветеран Сообщения: 1202 |
Профиль | Отправить PM | Цитировать Есть жесткий диск. На нем 2 раздела. Если я знаю, что буква одного раздела, допустим, X, то как мне узнать букву другого раздела?
|
|
------- Отправлено: 08:06, 14-12-2011 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать sLiDeR-X, WSH не сгодится ли? Вот примерный шаблон:
Option Explicit Dim strDriveLetter Dim strComputer Dim objSWbemLocator Dim objSWbemServicesEx Dim objSWbemObjectEx_Win32_LogicalDisk Dim objSWbemObjectEx_Win32_DiskPartition Dim objSWbemObjectEx_Win32_DiskDrive strDriveLetter = "X:" strComputer = "." Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator") Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2") Set objSWbemObjectEx_Win32_LogicalDisk = objSWbemServicesEx.Get("Win32_LogicalDisk.DeviceID='" & strDriveLetter & "'") For Each objSWbemObjectEx_Win32_DiskPartition In objSWbemObjectEx_Win32_LogicalDisk.Associators_(, "Win32_DiskPartition") 'WScript.Echo objSWbemObjectEx_Win32_DiskPartition.Path_ Exit For Next For Each objSWbemObjectEx_Win32_DiskDrive In objSWbemObjectEx_Win32_DiskPartition.Associators_(, "Win32_DiskDrive") 'WScript.Echo objSWbemObjectEx_Win32_DiskDrive.Path_ Exit For Next For Each objSWbemObjectEx_Win32_DiskPartition In objSWbemObjectEx_Win32_DiskDrive.Associators_(, "Win32_DiskPartition") 'WScript.Echo objSWbemObjectEx_Win32_DiskPartition.Path_ For Each objSWbemObjectEx_Win32_LogicalDisk In objSWbemObjectEx_Win32_DiskPartition.Associators_(, "Win32_LogicalDisk") If UCase(objSWbemObjectEx_Win32_LogicalDisk.Caption) <> UCase(strDriveLetter) Then WScript.Echo objSWbemObjectEx_Win32_LogicalDisk.Caption End If Next Next WScript.Quit 0 |
Отправлено: 10:23, 14-12-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1202
|
Профиль | Отправить PM | Цитировать Iska, возможно и сойдет.
Как мне вывести результат в файл, чтоб можно было батником считать этот результат? А vbs понимает ключи запуска? Допустим "Drives.vbs X:", чтоб не править каждый раз содержание для задания исходного диска? |
------- Отправлено: 10:34, 14-12-2011 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать sLiDeR-X, всё сделаю ближе к ночи.
|
Отправлено: 11:27, 14-12-2011 | #4 |
Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать Пока Iska думает, предложу свой вариант сценария.
Впрочем, и метод, и инструмент - те же. Dim objWMI, objLogicalDisks, objLD Dim objPartitions, objPart, objDrives, objDrive, objFS Dim objArgs, objDict Dim strLog, strTranslator, strLetter, strList, strTemp, intTemp strLog = "Volumes.log" Set objFS = CreateObject("Scripting.FileSystemObject") strTranslator = objFS.GetBaseName(WScript.FullName) If StrComp(strTranslator, "cscript", vbTextCompare) = 0 Then strLog = objFS.BuildPath(objFS.GetParentFolderName(WScript.ScriptFullName), strLog) Set objArgs = WScript.Arguments Select Case objArgs.Count Case 0: WScript.Echo "Наличие аргумента обязательно." Case 1 strLetter = objArgs.Item(0) If Len(strLetter) > 1 Then strLetter = Left(strLetter, 1) intTemp = Asc(strLetter) If (intTemp >= Asc("c") And intTemp <= Asc("z")) Or (intTemp >= Asc("C") And intTemp <= Asc("Z")) Then strLetter = strLetter & ":" Set objDict = CreateObject("Scripting.Dictionary") objDict.CompareMode = 1 Set objWMI = GetObject("winmgmts:\\.\root\cimv2") If objWMI.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType=3 AND DeviceID='" & strLetter & "'").Count > 0 Then Set objLogicalDisks = objWMI.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType=3") For Each objLD In objLogicalDisks Set objPartitions = objWMI.ExecQuery("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID=""" & _ objLD.DeviceID & _ """} WHERE AssocClass=Win32_LogicalDiskToPartition") For Each objPart In objPartitions Set objDrives = objWMI.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & _ objPart.DeviceID & _ """} WHERE AssocClass=Win32_DiskDriveToDiskPartition") For Each objDrive In objDrives strTemp = objLD.DeviceID If Not objDict.Exists(strTemp) Then objDict.Add strTemp, objDrive.Index Next Set objDrive = Nothing Set objDrives = Nothing Next Set objPart = Nothing Set objPartitions = Nothing Next Set objLD = Nothing Set objLogicalDisks = Nothing intTemp = objDict.Item(strLetter) For Each strTemp In objDict.Keys If objDict.Item(strTemp) = intTemp Then strList = strList & strTemp & vbNewLine Next Set objDict = Nothing 'WScript.Echo strList Set objFile = objFS.CreateTextFile(strLog, True) objFile.Write strList objFile.Close Set objFile = Nothing Else WScript.Echo "Том с заданным именем среди томов НЖМД не найден." End If Set objWMI = Nothing Else WScript.Echo "Неверное значение аргумента." End If Case Else: WScript.Echo "Много аргументов." End Select Set objArgs = Nothing Else WScript.Echo "Сценарий предназначен для работы в консольном режиме." End If Set objFS = Nothing WScript.Quit 0 |
|
Отправлено: 12:18, 14-12-2011 | #5 |
Ветеран Сообщения: 1202
|
Профиль | Отправить PM | Цитировать DmitriiV, как запускать?
"1.vbs X" не катит |
------- Отправлено: 12:33, 14-12-2011 | #6 |
Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать cscript 1.vbs X
|
Отправлено: 12:49, 14-12-2011 | #7 |
Ветеран Сообщения: 1202
|
Профиль | Отправить PM | Цитировать DmitriiV, а если это разбитая на разделы флешка?
Можно подкрутить? |
------- Отправлено: 13:18, 14-12-2011 | #8 |
Старожил Сообщения: 210
|
Профиль | Отправить PM | Цитировать Замените выражение WHERE DriveType=3 на выражение WHERE DriveType=2 OR DriveType=3 (в обоих случаях).
|
Отправлено: 14:16, 14-12-2011 | #9 |
Ветеран Сообщения: 1202
|
Профиль | Отправить PM | Цитировать DmitriiV, спасибо, ты очень помог
А для чего это было надо? Ответ тут: http://forum.oszone.net/post-1812573.html#post1812573 |
------- Отправлено: 14:34, 14-12-2011 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - [решено] определение размера жесткого диска | Bars66 | Скриптовые языки администрирования Windows | 19 | 26-01-2011 23:13 | |
C/C++ - [pascal\c] Определение объёма, процента загружености памяти физического носителя | Vayper | Программирование и базы данных | 3 | 07-06-2010 01:23 | |
определение названия и размера всех HDD | Talany | AutoIt | 2 | 03-06-2010 15:39 | |
Определение разделов жесткого диска Windows XP | Davlet | Хочу все знать | 6 | 11-01-2008 12:07 | |
определение диска для CD-ROMa | marussia | Microsoft Windows 95/98/Me (архив) | 2 | 05-05-2002 23:44 |
|