Что нового

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

snoitaleR

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
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,671
Репутация
2,481
Или так:

Код:
$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 Гуру
Сообщения
855
Репутация
223
CreatoR
Спасибо за скриптовый вариант для diskpart... Я думал, он только в интерактивном режиме может работать...
Второй вариант в WINDOWS XP действительно не сработал...
Вот мой вариант на основе скриптового варианта для diskpart...

Код:
; НАЧАЛО

 $DAT=@ScriptDir&"\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
Репутация
181
Если без лишних утилит то :

Код:
#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

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