Что нового

Смена буквы диска

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Подскажите, пожалуйста, как можно сменить букву диска средствами AUTOIT?
Если возможно, без внешних утилит...
Поиск дает два основных способа: через графический интерфейс "Управление дисками" и через командную строку, с помощью команды "diskpart"... Оба способа весьма неудобно использовать в скриптах...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
snoitaleR [?]
с помощью команды "diskpart"... Оба способа весьма неудобно использовать в скриптах
Чем неудобно? Вот пример (лично не проверял, но должно работать):

Код:
;~ _DriveSetLetter(2, 1, "E")

Func _DriveSetLetter($iDisk, $iPartition, $sLetter)
	Local $sScript, $sDskPrt_Script, $hFile
	
	$sScript = _
		'Select Disk=' & $iDisk & @CRLF & _
		'Select Partition=' & $iPartition & @CRLF & _
		'assign Letter=' & $sLetter & @CRLF & _
		'exit'
	
	$sDskPrt_Script = @TempDir & "\DskPrt_Script.dat"
	
	$hFile = FileOpen($sDskPrt_Script, 2)
	FileWrite($hFile, $sScript)
	FileClose($hFile)
	
	RunWait('Diskpart /s "' & $sDskPrt_Script & '"', '', @SW_HIDE)
	FileDelete($sDskPrt_Script)
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
Или так:

Код:
$objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
$colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_Volume WHERE Name= 'Q:\\'")
For $colItem In $colItems
    $colItem.DriveLetter = "S:"
    $colItem.Put_
Next


Хотя кажется на XP оно работать не будет...
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
CreatoR
Спасибо за скриптовый вариант для diskpart... Я думал, он только в интерактивном режиме может работать...
Второй вариант в WINDOWS XP действительно не сработал...
Вот мой вариант на основе скриптового варианта для diskpart...

Код:
; НАЧАЛО

 [email protected]&"\changeletter.dat"
 $TEXT="select volume e"&@CRLF&"assign letter=v"&@CRLF&"exit"
 $FILE=FileOpen($DAT,2)
 FileWrite($FILE,$TEXT)
 FileClose($FILE)

 ShellExecuteWait("diskpart.exe","/s "&$DAT,"","",@SW_HIDE)

; КОНЕЦ


Пока разбирался, появилась еще идея, но пока не реализованная...
Если получится, выложу здесь...
 

VladUs

Скриптер
Сообщения
621
Репутация
180
Если без лишних утилит то :

Код:
#Include <WinAPIEx.au3>

$GUID = _WinAPI_GetVolumeNameForVolumeMountPoint("U:\")
$Del = _WinAPI_DeleteVolumeMountPoint("U:\")
$Set = _WinAPI_SetVolumeMountPoint ( "X:\", $GUID )

U:\ - Старая буква диска
X:\ - Новая буква диска


Это можно и в функцию оформить (Спасибо Yashied`у)


Код:
_DiskRename("Z:\", "U:\")

Func _DiskRename($PathOld,$PathNow )
$GUID = _WinAPI_GetVolumeNameForVolumeMountPoint($PathOld)
$Old = _WinAPI_DeleteVolumeMountPoint($PathOld)
$New = _WinAPI_SetVolumeMountPoint ( $PathNow, $GUID )
Endfunc

Первый аргумент - Старая буква диска
Второй аргумент - Новая буква диска
 
Верх