Войти

Показать полную графическую версию : скрипт извлечения всех виртуальных приводов оптических дисков


remderbauer
29-07-2016, 23:53
Добрый день. Прошу помощи. Нужен скрипт в автозагрузку, чтобы при запуске Виндовс 7 все виртуальные приводы извлекались (в контекстном меню привода есть команда "Извлечь"). Спасибо заранее

MKN
30-07-2016, 11:21
чтобы при запуске Виндовс 7 все виртуальные приводы извлекались »
В смысле, размонтировались ?
Тогда можно: mountvol X: /d
X - буква виртуального привода (UltraISO_шные вирт привода размонтируются нормально)
Если буквы заранее известны, то всё просто, если всегда разные, надо подумать...

Как DOS-командно перечислить все буквы только вирт приводов, не знаю. Наверное придётся wmic использовать и извлекать нужную инфу...
Типа такого :
wmic logicaldisk where drivetype=5 get description,name
Будут перечислены описание-description всех устр-в(CD-ROM) и их буквы(name) , включая виртуальные (description можно исключить).

remderbauer
30-07-2016, 17:13
а если известно имя привода (метка), которая всегда одна и та же?

Iska
31-07-2016, 03:53
а если известно имя привода (метка), которая всегда одна и та же? »
Запросто (на WSH):
Option Explicit

Dim objVerb

For Each objVerb In WScript.CreateObject("Shell.Application").NameSpace("D:\").self.Verbs
If StrComp(objVerb.Name, "&Извлечь", vbTextCompare) = 0 Then
objVerb.DoIt
End If
Next

WScript.Quit 0

remderbauer
31-07-2016, 10:31
NameSpace("D:\") »
Спасибо, однако есть два вопроса:
1. Букву диска можно не указывать? А просто прописать именно имя-метку привода?
2. Этот вот WSH, его как сохранить, в каком формате (расширение файла какое)? Потом просто его в автозагрузку кинуть и он будет работать или надо какие-то еще действия делать?

Iska
31-07-2016, 19:26
1. Букву диска можно не указывать? А просто прописать именно имя-метку привода? »
Нет, нельзя не указывать.

Если речь про «Label», то потребуется расширить код таким образом:
Option Explicit

Dim strLabel

Dim objDrive
Dim objVerb


strLabel = "My Disk"

For Each objDrive In WScript.CreateObject("Scripting.FileSystemObject").Drives
If StrComp(objDrive.VolumeName, strLabel, vbTextCompare) = 0 Then
For Each objVerb In WScript.CreateObject("Shell.Application").NameSpace(objDrive.RootFolder.Path).self.Verbs
If StrComp(objVerb.Name, "&Извлечь", vbTextCompare) = 0 Then
objVerb.DoIt
End If
Next
End If
Next

WScript.Quit 0


2. Этот вот WSH, его как сохранить, в каком формате (расширение файла какое)? Потом просто его в автозагрузку кинуть и он будет работать или надо какие-то еще действия делать? »
Сохранить в файл с расширением «.vbs», поместить в любое место, поместить ярлык на него в папку «Автозагрузка» личного Главного меню, либо указать путь к файлу в реестре в любом из мест автозагрузки.

alpap
31-07-2016, 20:22
У меня, например, таким образом определяется буква именно виртуального диска:

wmic path Win32_CDROMDrive where MediaType="DVD-ROM" get drive /value

для родного MediaType="DVD Writer"
у всех так? Это можно использовать?

Iska
31-07-2016, 22:46
Нет конечно:
C:\Мои проекты>wmic.exe path Win32_CDROMDrive get Caption, Drive, MediaType /value


Caption=WinCDEmu drive
Drive=W:
MediaType=UNKNOWN

alpap
01-08-2016, 09:02
жаль.

remderbauer
02-08-2016, 11:18
а где мое последнее сообщение? О_о

ммм... короче, скрипт нужно притормозить, паузу ему прописать в началае секунд на 10-15 можно? А то скрипт запускается тогда, когда приводы видимо не готовы еще, они же виртуальные, а не аппаратные...

alpap
02-08-2016, 11:31
::XP и выше
>nul ping -n 16 127.0.0.1
::Выше XP
>nul timeout /t 15

Iska
02-08-2016, 11:34
паузу ему прописать в началае секунд на 10-15 можно? »
Option Explicit

Dim strLabel

Dim objDrive
Dim objVerb


WScript.Sleep 15 * 1000

strLabel = "My Disk"

For Each objDrive In WScript.CreateObject("Scripting.FileSystemObject").Drives
If StrComp(objDrive.VolumeName, strLabel, vbTextCompare) = 0 Then
For Each objVerb In WScript.CreateObject("Shell.Application").NameSpace(objDrive.RootFolder.Path).self.Verbs
If StrComp(objVerb.Name, "&Извлечь", vbTextCompare) = 0 Then
objVerb.DoIt
End If
Next
End If
Next

WScript.Quit 0




© OSzone.net 2001-2012