Atribuindo letra a uma unidade usando autorun

0

Eu tenho uma unidade externa que, por motivos inevitáveis, precisa receber a mesma letra, independentemente do computador em que eu a conecto. Eu pensei que poderia ser realizado por um script Diskpart. Eu sei o GUID da partição, mas como faço para selecionar o disco rígido no Diskpart usando o GUID? Ou existe alguma outra maneira de atribuir uma carta ao disco rígido usando um script?

    
por Mycroft Holmes 08.05.2015 / 17:03

2 respostas

0

Eu também fiz um script do Powershell para fazer o mesmo trabalho. O Powershell faz um trabalho melhor que o script em lote.

$driveI = Get-WmiObject -Class win32_volume -Filter "DriveLetter='I:'"

if ($driveI -eq $null)  {

    write-host "I: is free..."

}   elseif ($driveI.DeviceID.Contains("7899c0f7-f556-11e4-9cf2-7071bc4ab2b5") -And  "$drive.SerialNumber = '-1675536360'")    {

    write-host "I: is already assigned to the required disk..."
    Write-Host "Press any key to continue ..."
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    exit

}   else    {    
    write-host "I: is occupied..."
    foreach ( $s in @("'Z:'", "'Y:'", "'X:'", "'W:'", "'V:'", "'U:'", "'T:'", "'R:'", "'Q:'", "'P:'", "'O:'", "'N:'", "'M:'", "'L:'", "'K:'", "'J:'", "'H:'", "'G:'", "'F:'", "'E:'", "'D:'", "'B:'", "'A:'"))
    {
        $testdrv = Get-WmiObject -Class win32_volume -Filter "DriveLetter=$s"

        if ($testdrv -eq $null)
        {
            $s = $s.Trim([char]0x0027)
            Set-WmiInstance -input $driveI -Arguments @{DriveLetter=$s}
            Write-Host I: has been moved to $s
            break
        }
    }
}

$diary = Get-WmiObject -Class win32_volume -Filter "Label='My Diary'"
if ($diary.DeviceID.Contains("7899c0f7-f556-11e4-9cf2-7071bc4ab2b5") -And  "$diary.SerialNumber = '-1675536360'")
{
    Set-WmiInstance -input $diary -Arguments @{DriveLetter="I:"}
    Write-Host "Press any key to continue ..."
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    exit

}   else    {

    Write-Host Error Occured!
    Write-Host "Press any key to continue ..."
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    exit
}
    
por 12.05.2015 / 12:09
1

Aqui está o arquivo em lote que eu escrevi para mudar a letra do volume para K. Qualquer ajuda para melhorar o código seria muito apreciada.

PS. Há uma parte do código no início para executar isso usando privilégios de administrador. Eu omiti isso intencionalmente.

:mainBody
set "volume=\Volume{8bc9f784-9f15-11e4-be58-a60f30d14122}"
set "drive="

for %%D in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
mountvol %%D: /L | findstr "%volume%" >nul
if not errorlevel 1 (
if %%D==K (
echo DONE!
goto end
) else (
set "drive=%%D"
goto clearK
)
)
)

:clearK
mountvol K: /L >nul
if errorlevel 1 (
echo K: is free...
) else (
echo K: is taken...
for /f "tokens=1 delims=" %%A in ('mountvol K: \L') do SET currdriveguid=%%A
for %%D in ( Z Y X W V U T S R Q P O N M L K J H G F E D B A ) do (
mountvol %%D: /L >nul
if errorlevel 1 (
mountvol K: /d
mountvol %%D:\ currdriveguid
echo Current Volume moved to %%D:...
goto assignK
)
)
)


: assignK
if not defined drive (
mountvol K:\ \?%volume%\
) else (
mountvol %drive%: /D
mountvol K:\ \?%volume%\
)

:end
    
por 08.05.2015 / 23:27