'Based upon CD location/letter/partition creation script at
'http://www.msfn.org/board/index.php?showtopic=60721&st=20
'Posted by (author?) Tracy7011 Dec 4 2005, 10:37 AM

'This script will:
'1. find your cd-rom drive letter.
'2. find the disk id of your hard disk
'3. create a diskpart txt script file to a. remove the cd-rom/zip/partition drive letter, b. reassign letters
'4. Creates a batch file that launches diskpart with the above script file

' you can never know if windows will call the hard disk disk 1 or disk 0.

'************************DoDrives.vbs*********************
Option Explicit

'Declared
DIM txtFile, objFSO, objWMIService, objShell, objDisk, wmiServices, wmiDiskDrives, wmiDiskDrive
DIM wmiDiskPartitions, wmiDiskPartition, wmiLogicalDisks, wmiLogicalDisk, colDisks

DIM diskpartPath, workingPath, UserDriveLabel, batFileName, txtFileName, logFileName, NewBat, NewFile
DIM ComputerName, strComputer, DefaultString
DIM DiskNum, CDVolLetter, ZipVolLetter, BootVolLetter, UserVolLetter, thrInVolLetter
DIM targetCDltr, targetZipltr, targetUserltr
Const FOR_READING = 1, FOR_WRITING = 2

'Init
ComputerName = "."
strComputer = "."
diskpartPath = "%windir%\system32\diskpart.exe /S"

   workingPath = "C:\ImageTools\"
   batFileName = "rsbat"
   txtFileName = "rstxt"
   logFileName = "rslog"
UserDriveLabel = "User Drive"

 targetZipltr = "b"
targetUserltr = "u"
  targetCDltr = "d"

DefaultString = Array ("select volume ", "remove noerr", "assign letter ", "select disk ", _
"Create partition primary", "exit")
NewFile = workingPath & txtFileName & ".txt" 'create a .txt script file for diskpart
NewBat = workingPath & batFileName & ".bat" 'use batch file to launch format after diskpart completes

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk")

'This simply gets drive letters of currently assigned drives
For Each objDisk in colDisks
' wscript.echo objDisk.DriveType
' wscript.echo objDisk.Description
' wscript.echo objDisk.VolumeName
  Select Case objDisk.DriveType
    Case 0 'Unknown
    Case 1 'No Root Directory
    Case 2 'Removable Disk
      If objDisk.Description = "3 1/2 Inch Floppy Drive" Then
        thrInVolLetter = objDisk.DeviceID
      Else
        ZipVolLetter = objDisk.DeviceID
      End If
    Case 3 'Local Disk
      If objDisk.VolumeName = UserDriveLabel Then
        UserVolLetter = objDisk.DeviceID
      Else
        BootVolLetter = objDisk.DeviceID
      End If
    Case 4 'Network Drive
    Case 5 'Compact Disc
      CDVolLetter = objDisk.DeviceID
    Case 6 'RAM Disk
    Case Else
  End Select
Next

wscript.echo " 3.5: " & thrInVolLetter
wscript.echo "Boot: " & BootVolLetter
wscript.echo " Zip: " & ZipVolLetter & " => " & targetZipltr
wscript.echo "User: " & UserVolLetter & " => " & targetUserltr
wscript.echo "  CD: " & CDVolLetter & " => " & targetCDltr

'     Write out script txt file for diskpart
      Set txtFile=objfso.CreateTextFile(NewFile, True) 'Create a new script text file

      If ZipVolLetter = "" Then
        wscript.echo "No Zip Drive Found"
      Else
        txtFile.WriteLine (DefaultString(0)) & ZipVolLetter 'select volume x: (x = Zip Drive Letter)
        txtFile.WriteLine (DefaultString(1)) 'remove noerr
        txtFile.WriteLine (DefaultString(2)) & targetZipltr 'assign Zip letter x
      End If

      If UserVolLetter = "" Then
        wscript.echo "No User Drive Found"
      Else
        txtFile.WriteLine (DefaultString(0)) & UserVolLetter 'select volume x: (x = User Drive Letter)
        txtFile.WriteLine (DefaultString(1)) 'remove noerr
        txtFile.WriteLine (DefaultString(2)) & targetUserltr 'assign User letter x
      End If

      If CDVolLetter = "" Then
        wscript.echo "No CD Drive Found"
      Else
        txtFile.WriteLine (DefaultString(0)) & CDVolLetter 'select volume x: (x = CD Drive Letter)
        txtFile.WriteLine (DefaultString(1)) 'remove noerr
        txtFile.WriteLine (DefaultString(2)) & targetCDltr 'assign CD letter x
      End If

      txtFile.WriteLine (DefaultString(5)) 'exit
      txtFile.close 'Close the new file

'     Create batch file to encapsulate diskpart - to be able to format immediatly afterward
      Set txtFile=objfso.CreateTextFile(NewBat, True) 'Create a new batch file
      txtFile.WriteLine diskpartPath & " " & workingPath & txtFileName & ".txt > " & workingPath & logFileName & ".txt" 'This line launches diskpart
      txtFile.WriteLine "exit" 'exit
      txtFile.close 'Close the new file

      Set objShell = WScript.CreateObject("WScript.Shell")
      objShell.Run("%comspec% /K " & workingPath & batFilename & ".bat"), 1, true 'Run the bat file
      objFSO.DeleteFile(workingPath & batFileName & ".bat"), true 'deletes bat (cleanup)