Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Определение всех букв одного физического диска

Ответить
Настройки темы
CMD/BAT - [решено] Определение всех букв одного физического диска

Аватара для sLiDeR-X

Ветеран


Автор проектов


Сообщения: 1202
Благодарности: 280


Конфигурация

Профиль | Отправить PM | Цитировать


Есть жесткий диск. На нем 2 раздела. Если я знаю, что буква одного раздела, допустим, X, то как мне узнать букву другого раздела?

-------
Конструктор RDS_Boot_KIT и комплект Recovery DiskSuite


Отправлено: 08:06, 14-12-2011

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить 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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для sLiDeR-X

Ветеран


Автор проектов


Сообщения: 1202
Благодарности: 280

Профиль | Отправить PM | Цитировать


Iska, возможно и сойдет.
Как мне вывести результат в файл, чтоб можно было батником считать этот результат?
А vbs понимает ключи запуска? Допустим "Drives.vbs X:", чтоб не править каждый раз содержание для задания исходного диска?

-------
Конструктор RDS_Boot_KIT и комплект Recovery DiskSuite


Отправлено: 10:34, 14-12-2011 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


sLiDeR-X, всё сделаю ближе к ночи.

Отправлено: 11:27, 14-12-2011 | #4


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить 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


Аватара для sLiDeR-X

Ветеран


Автор проектов


Сообщения: 1202
Благодарности: 280

Профиль | Отправить PM | Цитировать


DmitriiV, как запускать?
"1.vbs X" не катит

-------
Конструктор RDS_Boot_KIT и комплект Recovery DiskSuite


Отправлено: 12:33, 14-12-2011 | #6


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


cscript 1.vbs X
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:49, 14-12-2011 | #7


Аватара для sLiDeR-X

Ветеран


Автор проектов


Сообщения: 1202
Благодарности: 280

Профиль | Отправить PM | Цитировать


DmitriiV, а если это разбитая на разделы флешка?
Можно подкрутить?

-------
Конструктор RDS_Boot_KIT и комплект Recovery DiskSuite


Отправлено: 13:18, 14-12-2011 | #8


Старожил


Сообщения: 210
Благодарности: 76

Профиль | Отправить PM | Цитировать


Замените выражение WHERE DriveType=3 на выражение WHERE DriveType=2 OR DriveType=3 (в обоих случаях).
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:16, 14-12-2011 | #9


Аватара для sLiDeR-X

Ветеран


Автор проектов


Сообщения: 1202
Благодарности: 280

Профиль | Отправить PM | Цитировать


DmitriiV, спасибо, ты очень помог

А для чего это было надо? Ответ тут: http://forum.oszone.net/post-1812573.html#post1812573

-------
Конструктор RDS_Boot_KIT и комплект Recovery DiskSuite


Отправлено: 14:34, 14-12-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Определение всех букв одного физического диска

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] определение размера жесткого диска 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




 
Переход