Changer la lettre d'un lecteur [Résolu]

Messages postés
14300
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
19 novembre 2018
- 30 juil. 2008 à 12:30 - Dernière réponse :
Messages postés
14300
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
19 novembre 2018
- 17 mai 2009 à 13:13
Bonjour,

Je recherche un code (ou une piste) pour changer la lettre d'un lecteur, voici la raison :
J'ai un disque dur USB, contenant quelques programmes qui ont besoin d'un lien fixe à un fichier (absolu et non relatif), pour cela, je dois faire attention à chaque fois que mon disque dur soit bien le lecteur F, en dégageant plus loin les autres lecteurs (CD, Réseaux, ....) si besoin, et cela, automatiquement.

En espérant que vous pourrez m'aider.

Cordialement.
Nicolas.

Afficher la suite 

Votre réponse

19 réponses

Meilleure réponse
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Dernière intervention
2 juin 2016
- 30 juil. 2008 à 15:18
3
Merci
ca marche pour moi ou presque pour assigner sur B: et non sur F:

lancer l'utilitaire Diskpart et si  3 est le volume amovible (résultat de list volume)
Diskpart se lancera ensuite avec les commandes dans un fichier
DiskPart /s commandes.txt

Commandes.txt contiendra 4 commande

list volume[entrée]
select volume 3[entrée]
assign letter=b[entrée]
exit

Merci cs_loulou69 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_loulou69
Meilleure réponse
Messages postés
14300
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
19 novembre 2018
- 1 août 2008 à 11:44
3
Merci
Bonjour,

Merci (avec un peu de retard, mais je n'ai inet qu'au boulot ...), donc j'ai décidé d'automatisé DiskPart, cela me parraissait plus simple, voici le code (à mettre dans une appli console) :

Module Module1
   
   Private Class ClsVolume
      
      Private mVolNum As Integer
      
      Private mLetter As String
      
      
      Public Sub New(ByVal pLine As String)
         mVolNum =  CInt(pLine.Substring(9, 3).Trim)
         mLetter = pLine.Substring(15, 1)
      End Sub<hr />
      Public ReadOnly Property VolNum() As Integer
         Get
            Return mVolNum
         End Get
      End Property<hr />
      
      Public ReadOnly Property Letter() As String
         Get
            Return mLetter
         End Get
      End Property<hr />
      
      Public Overrides Function ToString() As String
         Return String.Format("{0} -> {1}", mVolNum, mLetter)
      End Function<hr />
   End Class<hr />
   
   
   ''' <summary>
   ''' Paramètres :
   ''' Lecteur actuel
   ''' Lecteur désiré
   ''' ID du process père (attrendre la fermeture)
   ''' Process à lancer à la fin
   ''' </summary>
   ''' 

   ''' <remarks></remarks>
   Sub Main(ByVal pParams As String())
      If pParams.Length  <>  4 Then
         Return
      End If
      
      Dim lSource As String  = pParams(0)
      Dim lDest As String =  pParams(1)
      Dim lProcessID As Integer = CInt(pParams(2))
      Dim lToStart As String = pParams(3)
      
      
      Dim lProcess As Diagnostics.Process
      
      If lProcessID  <>  0 Then
         lProcess  = Process.GetProcessById(lProcessID)
      Else
         lProcess =  Nothing
      End If
      
      Do
         Threading.Thread.Sleep(2000)
      Loop While lProcess IsNot Nothing AndAlso Not lProcess.HasExited
      
      Dim ltVolumes As ClsVolume()
      
      lProcess = New Diagnostics.Process
      With lProcess.StartInfo
      .FileName = "diskpart.exe"
      .UseShellExecute = False
      .RedirectStandardInput = True
      .RedirectStandardError = True
      .RedirectStandardOutput = True
      End With
      lProcess.Start()
      
      
      ltVolumes = GetListVolumes(lProcess)
      
      Dim lVolSrc As ClsVolume = Nothing
      Dim lVolDst As ClsVolume = Nothing
      
      Console.WriteLine("---")
      For Each lVol As ClsVolume In ltVolumes
         If lVol.Letter = lDest Then
            lVolDst = lVol
            Console.ForegroundColor = ConsoleColor.Red
         ElseIf lVol.Letter = lSource Then
            lVolSrc = lVol
            Console.ForegroundColor = ConsoleColor.Green
         Else
            Console.ForegroundColor = ConsoleColor.Gray
         End If
         Console.WriteLine(lVol)
      Next
      Console.ForegroundColor = ConsoleColor.Gray
      Console.WriteLine("---")
      
      Dim lLstDrives As New List(Of IO.DriveInfo)
      lLstDrives.AddRange(My.Computer.FileSystem.Drives)
      
      Dim lModif As Boolean = False
      Dim lLetter As String = "D"
      
      Do
         lModif = False
         For Each lDrive As IO.DriveInfo In lLstDrives
            If lDrive.Name.Substring(0, 1) = lLetter Then
               lModif = True
               lLetter = Chr(Asc(lLetter) + 1)
               Exit For
            End If
         Next
      Loop While lModif
      
      Console.WriteLine("Suivant disponible : {0}", lLetter)
      
      If lVolSrc IsNot Nothing Then
         If lVolDst IsNot Nothing Then
            MoveLecteur(lProcess, lVolDst, lLetter)
         End If
         MoveLecteur(lProcess, lVolSrc, lDest)
      End If
      
      #If DEBUG Then
      Console.ReadKey()
      #End If
      
      lProcess.StandardInput.WriteLine("exit")
      
      Do While lProcess.StandardOutput.ReadLine  <>  "DISKPART> "
      Loop
      
      lProcess.StandardInput.WriteLine("exit")
      
      If lToStart.Length > 0 Then
         Process.Start(lToStart)
      End If
   End Sub

<hr />
   
   Private Function GetListVolumes(ByVal pProcess As Diagnostics.Process) As ClsVolume()
      Dim lLstVolumes As New List(Of ClsVolume)
      
      pProcess.StandardInput.WriteLine("List volume")
      
      Do While pProcess.StandardOutput.ReadLine <> "DISKPART> "
      Loop
      
      pProcess.StandardInput.WriteLine("REM")
      
      Dim lStr As String  = ""
      Dim lNbLine As Integer =  0
      Do
         lStr = pProcess.StandardOutput.ReadLine
         'Console.WriteLine(lStr)
         If lStr.Length  <>  0 Then
            If lNbLine > = 2 Then
               lLstVolumes.Add(New ClsVolume(lStr))
            Else
               lNbLine +=  1
            End If
         Else
            lNbLine = 0
         End If
      Loop While lStr  <>  "DISKPART> "
      
      Return lLstVolumes.ToArray
   End Function<hr />
   
   Private Sub MoveLecteur(ByVal pProcess As Diagnostics.Process, ByVal pVolume As ClsVolume, ByVal pLetter As String)
      
      pProcess.StandardInput.WriteLine("select volume " + CStr(pVolume.VolNum))
      
      Do While pProcess.StandardOutput.ReadLine <> "DISKPART> "
      Loop
      
      pProcess.StandardInput.WriteLine("assign letter =" + pLetter)
      
      Do While pProcess.StandardOutput.ReadLine <> "DISKPART> "
      Loop
      
      pProcess.StandardInput.WriteLine("REM")
      
      Do While pProcess.StandardOutput.ReadLine <> "DISKPART> "
      Loop
   End Sub<hr />
End Module<hr />

<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->Coloration syntaxique vb/vba/vb.net

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de NHenry
Commenter la réponse de cs_loulou69
Messages postés
401
Date d'inscription
mercredi 19 avril 2006
Dernière intervention
6 juin 2011
- 30 juil. 2008 à 13:58
0
Merci
Bonjour,

Apparemment ce code correspond a ce que tu recherches : http://www.codeproject.com/KB/system/ChangeDriveName.aspx (il faut etre authentifié pour pouvoir dl la source)
C'est un prog écrit en c++.

En jetant un oeil rapide, il semblerait que les lettres de lecteurs soient stocké dans HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices.

Bonne Prog
Commenter la réponse de lesdis
Messages postés
14300
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
19 novembre 2018
- 30 juil. 2008 à 14:16
0
Merci
Bonjour,

Merci pour ces quelques liens, je regarde ça rapidement et je vous répond en conséquence de ma sélection.

Commenter la réponse de NHenry
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
- 30 juil. 2008 à 14:33
0
Merci
sous dos il y avait un utilitaire pour cela , mais j'ai oublié son nom
 ( houps encore plus vieux que vb6)

Il y a (4.5 \ 1.5) sortes de gens, ceux qui comprennent le vb et les autres ,je fais partie des autres/FONT>
Commenter la réponse de gillardg
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Dernière intervention
2 juin 2016
- 30 juil. 2008 à 14:38
0
Merci
J'ai essayé les codes trouvés sur le web mais peut-être as tu constaté comme moi que cela ne fonctionnait pas sous XP , alors selon le SP et les droits utilisateurs...

gillard pense peut être à la commande ASSIGN du Dos , mais existe t'elle encore?

à tester :  http://support.microsoft.com/kb/300415/


 
Commenter la réponse de cs_loulou69
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
- 30 juil. 2008 à 14:47
0
Merci
non ça n'éxiste plus

Il y a (4.5 \ 1.5) sortes de gens, ceux qui comprennent le vb et les autres ,je fais partie des autres/FONT>
Commenter la réponse de gillardg
Messages postés
14300
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
19 novembre 2018
- 30 juil. 2008 à 14:47
0
Merci
Bonjour,

Pour l'instant,  je vais regarder les liens fournis.

J'ai essayer Assign /?, mais il me jette en disant que c'est un cône nu.

Commenter la réponse de NHenry
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
- 30 juil. 2008 à 15:10
0
Merci
assign = dos 5
ou dos 6 disque suplémentaire contenant des utilitaires et est toujours disponible en download en ftp ) microsoft.com seulement j'ai comme un doute par rapport à win32
 je ne comprends pas pourquoi un utilitaire du genre "ALIAS"  n'est pas livré avec windaube

Il y a (4.5 \ 1.5) sortes de gens, ceux qui comprennent le vb et les autres ,je fais partie des autres/FONT>
Commenter la réponse de gillardg
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Dernière intervention
2 juin 2016
- 30 juil. 2008 à 15:39
0
Merci
1- Trouver le disque a movible
2- creer le fichier d'entrée pour diskPart




Dim objWMIService
Dim colItems
Dim objItem
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
Set colDisks = objWMIService.ExecQuery _
    ("Select * from Win32_LogicalDisk")
Dim DeviceID
For Each objDisk In colDisks
    Select Case objDisk.DriveType
        Case 2
            DeviceID = objDisk.DeviceID
    End Select
Next

open "c:\param.txt" for output as #1
print #1, "select volume " & DeviceID
print #1, "assign letter=b"


print #1,"exit"


close #1


 


 
Commenter la réponse de cs_loulou69
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Dernière intervention
2 juin 2016
- 30 juil. 2008 à 15:41
0
Merci
Commenter la réponse de cs_loulou69
Messages postés
14300
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
19 novembre 2018
- 30 juil. 2008 à 15:43
0
Merci
Bonjour,

Loulou69, tu viens de m'apprendre l'existence d'un utilitaire bien pratique (même si c'est risqué).

Cela fait donc 3 méthodes à essayer (même si je préfère plutot les 2 premières).

Commenter la réponse de NHenry
Messages postés
14300
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
19 novembre 2018
- 30 juil. 2008 à 15:45
0
Merci
Bonjour,

(un peu de retard à l'envoi de message)

Merci pour cette proposition de solution clé en main Loulou69, j'essaye cela ce soir et je revien 2m1.

Commenter la réponse de NHenry
Messages postés
14300
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
19 novembre 2018
- 1 août 2008 à 11:48
0
Merci
Bonjour,

J'attends de terminer l'autre programme (qui vérifie si tout va vien et déplace au besoin) pour le déposer entant que source.

Commenter la réponse de NHenry
Messages postés
14300
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
19 novembre 2018
- 15 août 2008 à 20:55
Commenter la réponse de NHenry
Messages postés
52
Date d'inscription
samedi 15 septembre 2007
Dernière intervention
30 mars 2017
- 17 mai 2009 à 08:58
0
Merci
Ya moyen de la faire en VBS??    Je cherche partout sur le net , mais je trouve pas.

Merci de votre aide si ya kelk1 qui a un peu de patience!!!
Commenter la réponse de vincm70
Messages postés
52
Date d'inscription
samedi 15 septembre 2007
Dernière intervention
30 mars 2017
- 17 mai 2009 à 09:06
0
Merci
je precise sans diskpart
Commenter la réponse de vincm70
Messages postés
14300
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
19 novembre 2018
- 17 mai 2009 à 13:13
0
Merci
Bonjour,

Le premier message de cette page ne t'as pas aidé ?
Je ne sais pas spécialement comment le faire en VBS.

Commenter la réponse de NHenry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.