L'article explore divers moyens de modifier la lettre d'un lecteur. Ceux qui ne sont pas intéressés par les approches en lignes de commandes peuvent consulter directement les passages portant sur USB Drive Letter Manager ou ChangeVolumeDriveLetter, programmes qui, j'en suis sûr, retiendront leur attention.
Lorsque l'on connecte un volume amovible, la lettre choisie par le système pour ce lecteur ne convient pas toujours. Nous avons fait des raccourcis, nous utilisons des programmes qui utilisent le lecteur, nous avons nos habitudes, et voilà que le disque externe consacré aux Sauvegardes ne veut plus être en S.
Remarque :
Une réponse simple à ce problème est d'utiliser un batch situé sur la clé USB, on n'a ainsi plus à se soucier de la lettre attribuée par Windows au volume amovible. Il suffit de ne pas préciser la lettre du volume de destination dans les commandes. Cette astuce sera amplement utilisée dans notre tuto. Voici un exemple avec Robocopy qui copie en miroir un dossier du disque dur sur le volume contenant le batch (le dossier "lasauvegarde" est créé s'il n'existe pas) :robocopy c:\mondossier lasauvegarde\ /MIR /FFT /XJ
pauseExemple avec xcopy (pour varier j'ai utilisé ".\" qui représente le lecteur en cours, mais ça marche aussi sans, comme ci-dessus) :
xcopy d:\mondossier .\masauvegarde\ /e /h /c /y /i
pause
Heureusement, Windows permet de rectifier le tir. Ça se corrige classiquement avec le Gestionnaire de Disques. Oui mais j'aimerais bien que ce soit automatique nous dit ce sympathique lecteur de Carpentras. Je vous invite à faire le tour des possibilités, puis, et surtout, à découvrir USB Drive Letter Manager. Un must ! La dernière partie de l'article aborde le sujet des liens relatifs à un même support.
- Gestionnaire de disques
- Utilisation de la commande DISKPART (c'est pour info ! Préférer mountvol)
- Utilisation de la commande MOUNTVOL
- AssignNewLetter.cmd
- Assign-B.cmd (très pratique)
- Assign-U.cmd (pas mal non plus)
- USB Drive Letter Manager (un must !)
- Surveillance Disque et System Volume Information
- Liens relatifs
- Autres articles en relation
- Liens
Aide et Support expose une méthode avec DISKPART et une méthode avec le Gestionnaire de Disques diskmgmt.msc; taper les mots lettre et lecteur dans la case du module de recherche de Aide et Support (WIN+F1) pour en savoir plus. Les plus motivés seront intéressés par cette documentation Microsoft : How Basic Disks and Volumes Work
Première méthode, utiliser le
gestionnaire de disques.
Pour le trouver, faire un clic droit sur le Poste de Travail, Gérer.
Dans la Console de Gestion de l'ordinateur, descendre à Gestion des disques.
Pour changer la lettre d'un lecteur faire un clic droit sur le volume, le
Menu Contextuel propose diverses options dont "Modifier
la lettre de lecteur et les chemins d'accès".
Seules les lettres encore disponibles sont proposées.
Qu'un lecteur ait une lettre ou non, il peut être associé à un dossier. Cette
notion de Point
de montage va être abordée plus loin.
La commande diskmgmt.msc permet d'accéder directement au gestionnaire :
Démarrer>Exécuter>diskmgmt.msc
On peut :
Attribuer une lettre, Modifier la lettre d'un Volume, ou encore monter un
lecteur dans un dossier :
Monter un volume dans un dossier NTFS vide est également possible en ligne de commandes avec mountvol. Le nom évoqué dans l'aide en ligne de cette commande est "Point de montage". Cette technique permet de contourner la limitation en lettres disponibles. Nous allons voir plus bas les possibilités de la commande MOUNTVOL. La commande subst se contente d'affecter une lettre de lecteur à un chemin de dossier en créant un alias. La commande Junction crée des Points de Jonction, appelés également Liens Symboliques.
Astuce : la lettre B est disponible la plupart du temps.
On va passer à plus amusant : changer la lettre d'un volume amovible en lignes de commandes :
Rappel : ceci est une étude. Diskpart n'est pas la meilleure méthode. Continuez à lire !
Avant de passer à la présentation d'USB Drive Letter Manager, voici, avec toutes les réserves d'usages, quelques commandes permettant de changer les lettres de lecteurs. Ces batchs sont destinés à être utilisés depuis le lecteur amovible dont on désire changer la lettre.
En cherchant les mots lettre et lecteur dans Aide et Support on trouve ce chapitre : Affecter, modifier ou supprimer une lettre de lecteur. La première solution a été vue plus haut. La seconde solution est Utilisation d'une ligne de commande. La commande proposée est DISKPART. La vue suivante montre comment on peut modifier la lettre d'un lecteur en quelques lignes de commandes avec DISKPART :
Soit une clé USB positionnée en B:\ à laquelle on doit attribuer la lettre X
EXIT pour quitter le prompt
DISKPART>
Si on essaie de prendre une lettre déjà occupée, la modification est refusée.
Si on essaie avec la même lettre (B) il ne se passe rien.
Plus d'aide sur DISKPART :
Remarque :
Rappel : ceci est une étude. Diskpart n'est pas la meilleure méthode. Continuez à lire !
Coller les commandes ci-dessous dans un fichier Bloc-Notes, puis sauvegarder sous le nom AssignNewLetter.cmd sur la clé ou le disque USB pour qu'il soit toujours à disposition. Ce Batch extrait la lettre du lecteur sur lequel il se trouve pour la modifier. Il fonctionnera donc sur un autre PC sur lequel on connecte le volume.
:AssignNewLetter.cmd
@echo off
color 1F
set volume=%~d0
echo.
set letter=%volume:~0,1%
echo Ce volume a la lettre = %letter% =
set /p NewLetter=Quelle est la nouvelle lettre a attribuer au lecteur ?
echo.
echo Vous avez choisi la lettre : %NewLetter%
echo.
if %NewLetter%=="" exit
if /i %NewLetter%==%letter% goto :sameletter
if exist %NewLetter%: goto :exist
echo rescan > %temp%\drive.log
echo select volume %volume%>> %temp%\drive.log
echo assign letter=%NewLetter%>> %temp%\drive.log
echo exit>> %temp%\drive.log
diskpart -s %temp%\drive.log
del %temp%\drive.log
if exist %NewLetter%: mountvol %volume% /d
@pause
goto :eof
:sameletter
echo Ce lecteur a deja la lettre %letter%
@pause
goto :eof
:exist
echo %NewLetter%: n'est pas libre
@pause
X:\>AssignNewLetter.cmd
Ce volume a la lettre = X =
Quelle est la nouvelle lettre a attribuer au lecteur ?X
Vous avez choisi la lettre : X
Ce lecteur a deja la lettre X
Appuyez sur une touche pour continuer...
X:\>AssignNewLetter.cmd
Ce volume a la lettre = X =
Quelle est la nouvelle lettre a attribuer au lecteur ?C
Vous avez choisi la lettre : C
C: n'est pas libre
Appuyez sur une touche pour continuer...
X:\>AssignNewLetter.cmd
Ce volume a la lettre = X =
Quelle est la nouvelle lettre a attribuer au lecteur ?B
Vous avez choisi la lettre : B
Microsoft DiskPart version 5.1.3565
Copyright (C) 1999-2003 Microsoft Corporation.
Sur l'ordinateur : FSPSA
Veuillez patienter pendant que DiskPart analyse votre configuration...
..........
DiskPart a fini d'analyser votre configuration.
Le volume 12 est le volume sélectionné.
DiskPart a assigné la lettre de lecteur, mais votre ordinateur doit être redémarré
pour que les modifications prennent effet.
Quitte DiskPart...
Le chemin d'accès spécifié est introuvable.
X:\>
En réalité le lecteur est utilisable immédiatement avec sa nouvelle lettre.
Le message "Le chemin d'accès est introuvable" est dû au fait que X:\ a été
démonté par la commande mountvol %volume% /d
Cette variante attribue la lettre B en un clic :
Rappel : ceci est une étude. Diskpart n'est pas la meilleure méthode. Continuez à lire !
@set letter=B
:::::::::::::
@echo off
color 1F
set volume=%~d0
if /i %letter%==%volume:~0,1% goto :sameletter
echo DRIVE = %volume%
echo rescan > %temp%\drive.log
echo select volume %volume%>> %temp%\drive.log
echo assign letter=%letter%>> %temp%\drive.log
echo exit>> %temp%\drive.log
diskpart -s %temp%\drive.log
del %temp%\drive.log
if exist %letter%: mountvol %volume% /d
goto :eof
:sameletter
echo LETTRE ACTUELLE = %volume:~0,1%
echo LETTRE DEMANDEE = %letter% ???
pause
Si la lettre B est occupée, la modification est refusée.
On pourra retirer la commande pause utilisée pour la mise au point.
Lire Aide et Support :
Démarrer>Exécuter>hh ntcmds.chm::/mountvol.htm
Crée, supprime ou répertorie le point de montage d'un volume.
Mountvol
permet de lier des volumes sans avoir recours à une lettre de lecteur :
À l'utilisation la méthode DiskPart apparaît très lente. En jonglant un peu il est possible de s'en passer pour n'utiliser que la commande MountVol. Voici son fonctionnement :
B:\>mountvol b: /L
\\?\Volume{5ec2f28c-cc92-11db-a382-00138ffbb911}\
B:\>mountvol b: /D
B:\>mountvol x: \\?\Volume{5ec2f28c-cc92-11db-a382-00138ffbb911}\
Le répertoire en cours n'est pas valide.
B:\>x:
Le lecteur spécifié est introuvable.
B:\>e:
E:\>mountvol x: \\?\Volume{5ec2f28c-cc92-11db-a382-00138ffbb911}\
E:\>x:
X:\>
En première approche mountvol sans argument ni commutateurs
affiche l'aide
suivie de la liste des lecteurs et de leurs
GUID.
Pour limiter au lecteur qui nous intéresse on utilise,
dans la première commande, le commutateur /L pour obtenir le numéro d'identification
du lecteur B:\
\\?\Volume{5ec2f28c-cc92-11db-a382-00138ffbb911}\
Les GUID sont conservés dans cette clé du Registre :
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2
La commande suivante démonte le volume B:\ ==> mountvol b: /D
On note que la tentative de monter directement le volume X:\ se solde par le message "Le répertoire en cours n'est pas valide" et X:\ n'existe pas, il n'a pas été monté. Pour contourner cette difficulté il faut tout simplement se positionner sur un lecteur valide, ici E:\
La commande mountvol x: avec pour argument l'identification du volume amovible est alors un succès.
Ces particularités vont compliquer singulièrement le batch situé sur la clé USB. Il faudra créer un second batch externe au volume, lequel produira à son tour un fichier dans lequel il ira lire le CLSID du lecteur. Ces fichiers temporaires devront être supprimés en fin de traitement.
@echo off
color 1F
set volume=%~d0
set letter=%volume:~0,1%
echo.
echo Ce volume a la lettre = %letter% =
set /p NewLetter=Quelle est la nouvelle lettre a attribuer au lecteur ?
echo.
echo Vous avez choisi la lettre : %NewLetter%
echo.
if %NewLetter%=="" exit
if /i %NewLetter%==%letter% goto :sameletter
if exist %NewLetter%: goto :exist
set tp=%temp%\tmp.cmd
set tx=%temp%\tmp.txt
>%tp% echo mountvol %volume% /L^>%tx%
>>%tp% echo mountvol %volume% /D
>>%tp% echo for /f %%%%A in (%tx%) do set lecteur=%%%%A
>>%tp% echo mountvol %NewLetter%: %%lecteur%%
>>%tp% echo del %tx%
>>%tp% echo del %tp%
cd /d %temp%
%tp%
if exist %NewLetter%: mountvol %volume% /d
@pause
goto :eof
:sameletter
echo Ce lecteur a deja la lettre %letter%
@pause
goto :eof
:exist
echo %NewLetter%: n'est pas libre
@pause
Plusieurs techniques ont été utilisées :
Cette variante très pratique donne en un clic la lettre B au lecteur depuis
lequel il est lancé.
La lettre B est en effet toujours disponible ou presque, la clef USB ou le
disque amovible est ainsi placé en tête dans Poste de Travail.
Plus de question à se poser, si on veut accéder à la clef, à tout moment : WIN+R,b:
Voici le contenu de assign-b.cmd
:
@echo off
:::::::::::::::
set NewLetter=B
:::::::::::::::
set volume=%~d0
if /i %NewLetter%==%volume:~0,1% goto :sameletter
if exist %NewLetter%: goto :exist
set tp=%temp%\tmp.cmd
set tx=%temp%\tmp.txt
>%tp% echo mountvol %volume% /L^>%tx%
>>%tp% echo mountvol %volume% /D
>>%tp% echo for /f %%%%A in (%tx%) do set lecteur=%%%%A
>>%tp% echo mountvol %NewLetter%: %%lecteur%%
>>%tp% echo del %tx%
>>%tp% echo del %tp%
cd /d %temp%
%tp%
exit
:sameletter
echo LETTRE ACTUELLE = %volume:~0,1%
echo LETTRE DEMANDEE = %NewLetter% ???
pause
exit
:exist
echo %NewLetter%: n'est pas libre
pause
exit
La modification de la lettre est à présent très rapide. Si le Poste de
Travail est ouvert, on voit le lecteur changer de place. Il y a peu d'aide sur
la commande
MountVol, il faut chercher des
exemples pour apprendre à l'utiliser.
J'ajoute cet autre exemple.
Il est également possible d'utiliser des scripts VBS :
Change the Drive Letter of a Volume.
Si utiliser la lettre A ou B présente certains avantages, cela se révèle un handicap lorsque l'on utilise certains programmes pour lesquels les auteurs ne semblent pas avoir prévu cela. J'ai en effet noté que unetbootin par exemple ne détectait pas la clé USB montée en B. Quoiqu'il suffise de cocher "Show All Drives" cette situation est regrettable. J'ai donc le plaisir de proposer une variante qui donne la lettre U à la clé USB : assign-u.cmd
Après ces indigestes lignes de commandes, voici beaucoup plus léger : le très pratique et utile USB Drive Letter Manager :
USBDLM est une perle :
USB Drive Letter Manager for
Windows 2000, XP, Server 2003 and Vista
Control USB Drive Letter Assignment in Windows XP/2003/Vista/2008
Il s'installe comme un Service (USBDLM) et agit lors de la connexion d'un volume
externe USB, que ce soit une clé ou un disque. Selon les critères définis par
l'utilisateur dans le fichier USBDLM.INI, il attribue alors une lettre au volume.
L'utilisateur doit éditer le fichier USBDLM.INI (cliquer sur le fichier pour
l'ouvrir dans Bloc-Notes). Il est dans le dossier
d'installation du programme.
On y trouve également un exemple, USBDLM_sample.ini, et une aide, USBDLM_eng.chm :
%ProgramFiles%\USBDLM\USBDLM.INI
%ProgramFiles%\USBDLM\USBDLM_sample.ini
%ProgramFiles%\USBDLM\USBDLM_eng.chmInformations et téléchargement
www.uwe-sieber.de/english.html
www.uwe-sieber.de/usbdlm_e.html
www.uwe-sieber.de/usbdlm_help_e.html
TUTO
http://trac.ogsteam.fr/blog/category/usb
Pour que seules les lettres B, Q, et de U jusqu'à Z, soient disponibles pour les lecteurs amovibles :
[DriveLetters]
Letters=B,Q,U-Z
Pour que la présence d'un fichier nommé drive_Q.id sur la racine de la clé suffise à lui faire attribuer la lettre Q :
[DriveLetters10]
BusType1=USB
BusType2=FireWire
BusType3=SCSI
FileExists=%Drive%\drive_Q.id
Letter1=Q
Pour que le nom du volume décide de sa lettre :
[DriveLetters20]
VolumeLabel1=Quebec
Letter1=Q[DriveLetters30]
VolumeLabel1=Whisky
Letter1=W
Source :
Tips for USB pen drives, Safe Removal, Reactivate an USB Drive
sur le site de l'auteur de USBDLM
ListUsbDrives.exe est présent dans le dossier d'installation d'USBDLM. On peut
l'utiliser directement après décompression de
usbdlm.zip et le copier
sur la clé USB :
ListUsbDrives.exe identifie les volumes USB connectés. La ligne Ctrl DevID révèle l'ID du volume :
Connaissant l'ID d'un volume amovible, celui-ci devient manipulable avec la commande DEVCON, par exemple pour réactiver une clé USB "éjectée" sans avoir à la débrancher et rebrancher physiquement.
Rappel : le Gestionnaire de périphériques permet de connaître les numéros d'identification d'un matériel (Propriétés, onglet Détails).
Petit préambule : Administrateur ou pas ?
Agir sur des périphériques nécessite d'être
administrateur. Pour adapter les méthodes ci-dessous afin qu'elles soient
utilisables depuis un compte sans pouvoir (compte Standard pour Vista et W7,
appelé compte Limité sur XP), on peut utiliser la commande
runas. L'utilitaire
ShellRunAs est plus agréable à l'usage. Il existe aussi
nircmd elevate. Si on veut ne pas avoir à
entrer le mot de passe, le script
xrunas.vbs
exécute la commande runas en joignant le mot de passe, il suffira d'utiliser un
raccourci avec la commande. Si on utilise cette solution, être conscient de la
baisse de sécurité dû au fait que le mot de passe est en clair dans le raccourci.
Mais il est possible de compiler / crypter un script. Une excellente solution
existe avec cpau qui
peut crypter la commande. Astuce : démarrer
une Console CMD en tant qu'administrateur. Les commandes entrées dans cette
Console seront effectuées sous ce compte, c'est vérifiable dans le gestionnaire de
tâches. Le compte Administrateur prédéfini est utilisable s'il a un mot de passe :
images 1,
2.
Source : Tips for
USB pen drives, Safe Removal, Reactivate an USB Drive sur le
site de l'auteur de USBDLM
Discussion :
Faire apparaître la clé USB dans l'explorateur
Cette
démarche tient à l'accessibilité, les prises usb étant souvent d'accès peu aisé. On désire
réaccéder au contenu d'une clé restée physiquement connectée alors qu'on a
utilisé la fonction "Éjecter" du menu contextuel de l'explorateur de fichiers ou
l'icone "Retirer le périphérique en toute sécurité" de la Zone de Notification
sur la droite de la Barre des Tâches, ou bien même un outil comme
EjectUSB.exe
On a vu ci-dessus comment avec ListUsbDrives on pouvait identifier les volumes
amovibles.
Ma clé USB est montée avec la lettre B:\ (MountPoint). Son label
est BRAVO. Son ID est :
Ctrl DevID = USB\VID_0204&PID_6025\6&36F05019&0&3
Connaissant l'ID du périphérique, on utilise l'utilitaire en lignes de commandes DEVCON :
http://support.microsoft.com/kb/311272/fr
http://makemsi-manual.dennisbareis.com/devcon_exe.htm
http://www.hotline-pc.org/gestionnairedeperipheriques.htm#0501
Remarques :
-
Si devcon
fonctionne mal (Disable failed) avec Windows en 64 bits c'est parce qu'il faut
utiliser l'une des versions 64 bits.
Pour ma part c'est la version du dossier
amd64 qui fonctionne.
- Copier devcon.exe dans le dossier Windows, il n'y aura ainsi
pas à préciser de chemin lors de son utilisation :
devcon enable usb\vid_0204*
Après installation
du
WinDDK
devcon est par là : %programfiles%\WinDDK\7600.16385.1\Tools\devcon\
Après avoir testé les commandes devcon disable usb\vid_0204* et devcon enable usb\vid_0204* comme suggéré dans l'article cité en source, ça avait l'air de fonctionner. Mais ça ne marchait pas si on passait par une "éjection" propre de la clé. En lisant bien l'article, l'auteur signale l'inconvénient, et explique qu'il faut utiliser un HUB. Ceci m'a orienté vers un redémarrage de l'ensemble des équipements HUB de la carte mère. Après quelques essais il est apparu que seul le redémarrage des USB\VID était nécessaire.
Ceci fonctionne quelle que soit la méthode utilisée pour "éjecter" la clé et a l'avantage de ne plus avoir à l'identifier préalablement :
F:\>devcon restart
usb\vid* |
Malgré l'affichage de "Requires reboot" la clé est bien redétectée et le système propose l'ouverture de son contenu. L'examen du gestionnaire de périphériques devmgmt.msc ne révèle pas de manque. Le batch à créer est simplissime (à exécuter en tant qu'admin ou avec l'UAC désactivé) :
devcon restart usb\vid*
pause
La commande pause permet de lire le contenu de la console avant de la
refermer.
Finalement j'ai déterminé que la commande
devcon restart usb\vid_0409* détecte mes deux clés USB
situées en face avant. Je suppose que cette commande redémarre la partie commune
aux deux prises, ce que confirme l'examen du registre ci-dessous. Comme ce sont
les connexions en face avant qui me servent principalement pour les clés, il
ne m'est pas nécessaire de faire plus. Le temps d'exécution est faible puisqu'on
ne redémarre qu'un seul périphérique.
devcon restart usb\vid_0409*
Si ça ne marche pas, essayer avec devcon restart usb*
Ou ajouter au batch
une ligne devcon restart usb\root_hub* :
devcon restart usb\vid*
devcon restart
usb\root_hub*
pause
Autres commandes intéressantes :
devcon hwids usb*
devcon drivernodes
@usb\root_hub*
Acronymes
USB = Universal Serial Bus
PID = Product
IDentifier
VID = Vendor ID
Registre
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_0409&PID_005A
La solution DEVCON ci-dessus ne me donne pas entière satisfaction. Par exemple j'ai une clé qui résiste : une fois éjectée elle continue d'apparaître comme un Disque amovible vide qui demande "Insérez un disque dans le lecteur Disque amovible (H:)". Tous mes efforts pour sortir de cette situation ont échoué.
Uwe Sieber contacté au sujet de devcon restart a été très réactif. Il a créé un nouvel utilitaire RestartSrDev à utiliser en conjugaison avec son autre outil RemoveDrive. RestartSrDev est désigné spécialement pour les lecteurs sujets au code d'erreur 21. Le résultat est un succès. Merci Uwe.
Removedrive h: effectue
une éjection propre du lecteur H: qui disparaît cette fois totalement de
l'explorateur de fichiers.
Restartsrdev *
redémarre le lecteur avec succès
F:\>removedrive h: RemoveDrive V1.9 (x64) - prepares drives for safe removal Freeware by Uwe Sieber - www.uwe-sieber.de Removing Drive 'H:\' (ChipsBnk Flash Disk USB Device) success (reactivation is possible) F:\>restartsrdev * RestartSrDev V0.1 (x64) - restarts 'Code 21' devices Freeware by Uwe Sieber - www.uwe-sieber.de restarting device USB\VID_0204&PID_6025\6&A0B590C&1&3 ok |
Sécurité
Si un document est resté ouvert sur la clé,
RemoveDrive refuse d'opérer, et on obtient failed
au lieu de success.
Téléchargements
http://www.uwe-sieber.de
http://www.uwe-sieber.de/drivetools_e.html
http://www.uwe-sieber.de/files/removedrive.zip
http://www.uwe-sieber.de/files/restartsrdev.zip
Remove-restart-usb-keys.reg
http://fspsa.free.fr/remove-restart-usb-keys.reg
Pratique, ce fichier
reg, éditable avec Bloc-Notes, est à fusionner avec le registre.
Il ajoute
les items REMOVEDRIVE et RESTARTDRIVE au menu contextuel des volumes.
Usage :
- faire un
clic droit sur le lecteur H: et REMOVEDRIVE pour l'éjecter
- faire un clic
droit sur un lecteur quelconque et RESTARTDRIVE pour réactiver la clé
précédemment éjectée
Les volumes tels que les clés USB ne sont pas surveillés. Ceci concerne
uniquement les disques amovibles.
Les changements de lettre ont l'inconvénient d'activer la surveillance disque
(par défaut), un dossier système et caché est alors créé sur la racine, c'est le
System Volume
Information, ou SVI pour les
intimes.
La surveillance disque est désactivable via les Propriétés Système
(WIN+Pause), Onglet "Restauration du système. Sélectionner le disque dans la
liste et appuyer sur le bouton Paramètres. Ne surtout pas cocher "Désactiver la
Restauration du système" car tous les points de restauration seraient perdus.
En changeant de lettre ou en se connectant à un autre ordinateur, l'opération
est à refaire.
Ce dispositif activé par défaut. Outre qu'il est peu utile pour
un disque de données, il devient une gêne lors de la déconnexion d'un lecteur externe,
systématiquement refusée si on ne désactive pas la Surveillance du disque.
RestorWIN permet, entre autres, de désactiver rapidement la Surveillance d'un ou plusieurs disques. Sans installation, on peut donc copier RestorWIN.exe sur le disque externe. On ne peut que regretter l'absence d'une version en lignes de commandes.
Utilisation
Dans RestorWIN cliquer sur le Bouton "Configurer le système de restauration".
Dans la fenêtre qui s'ouvre aller à la ligne "À désactiver :"
Entrer les lettres des disques à désactiver, séparés par une virgule.
Cliquer sur le Bouton Valider.
Fermer RestorWIN.
Si aucun document ou programme n'est ouvert sur le disque, il est enfin éjectable.
L'information concernant l'activation de la surveillance de chaque
disque est stockée dans ce fichier texte :
C:\System
Volume Information\_restore{77A7A5BB-21CC-4F85-A1D5-DDF160C6E18C}\drivetable.txt
Le grand nombre est le
GUID
de la machine. Comme pour les disques, il est noté dans le
Registre :
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore\Cfg
MachineGuid={le
GUID
de votre machine}
Il est également ici :
C:\WINDOWS\system32\restore\MachineGuid.txt
KB302343 : Drivetable.txt contient des informations sur le chemin d'accès des points de montage, les GUID des volumes, les états (figé/désactivé/actif/système) et la taille maximale du magasin de données de chaque lecteur.
Réinitialiser DriveTable.txt résout certains problèmes de Restauration Système (Erreur d'exception, Drive letter missing in System Restore settings)
En VBS la méthode Disable de la classe WMI SystemRestore permet de désactiver facilement la surveillance d'un disque. Voici un exemple pour le disque D :
'Disable_D_SystemRestore.vbs
Set oSR=GetObject("winmgmts:/root/default:SystemRestore")
oSR.Disable("D:\")
Merci à Gilles LAURENT.
Ce script désactive la surveillance du disque sur lequel il se trouve :
'DisableThisDiskSystemRestore.vbs
Set oSR=GetObject("winmgmts:/root/default:SystemRestore")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Wscript.Shell")
strPath = objShell.CurrentDirectory
strDrive = objFSO.GetDriveName(strPath)
oSR.Disable(strDrive&"\")
On peut incorporer cette méthode Disable SystemRestore dans AssignNewLetter.cmd pour désactiver automatiquement la surveillance disque lors du changement de lettre
:version avec script vbs désactivant la surveillance disque
@echo off
color 1F
set volume=%~d0
set letter=%volume:~0,1%
echo.
echo Ce volume a la lettre = %letter% =
set /p NewLetter=Quelle est la nouvelle lettre a attribuer au lecteur ?
set NewLetter=%NewLetter:~0,1%
echo.
echo Vous avez choisi la lettre : %NewLetter%
echo.
if %NewLetter%=="" exit
if /i %NewLetter%==%letter% goto :sameletter
if exist %NewLetter%: goto :exist
set tp=%temp%\tmp.cmd
set tx=%temp%\tmp.txt
set vb=%temp%\tmp.vbs
>%vb% echo Set oSR=GetObject("winmgmts:/root/default:SystemRestore")
>>%vb% echo wscript.sleep 2222
>>%vb% echo oSR.Disable("%NewLetter%:\")
>%tp% echo mountvol %volume% /L^>%tx%
>>%tp% echo mountvol %volume% /D
>>%tp% echo for /f %%%%A in (%tx%) do set lecteur=%%%%A
>>%tp% echo mountvol %NewLetter%: %%lecteur%%
>>%tp% echo start wscript %vb%
>>%tp% echo del %tx%
>>%tp% echo del %tp%
cd /d %temp%
%tp%
if exist %NewLetter%: mountvol %volume% /d
@pause
goto :eof
:sameletter
echo Ce lecteur a deja la lettre %letter%
@pause
goto :eof
:exist
echo %NewLetter%: n'est pas libre
@pause
Gilles LAURENT a
récemment mis en place une
syndication RSS2
de son site. J'ai ainsi eu le plaisir de découvrir
ChangeVolumeDriveLetter.exe qui fait exactement, et de façon plus
professionnelle, ce que propose AssignNewLetterDisableSR.cmd
Télécharger
ChangeVolumeDriveLetter.zip et en extraire l'exécutable
ChangeVolumeDriveLetter.exe
Surtout ne pas l'exécuter de suite afin de ne pas prendre le risque de changer
la lettre de votre disque dur.
Copier ChangeVolumeDriveLetter.exe sur un volume amovible.
Exécuter ChangeVolumeDriveLetter.exe depuis le volume amovible. Cette vue
montre le programme en cours d'exécution. Ma clé USB nommée QUIR est
habituellement montée avec la lettre Q. Elle a ici été déplacée à la lettre B :
Remarque : la lettre A est disponible car je désactive systématiquement mon lecteur A.
Globalement Windows se débrouille assez bien avec les raccourcis, et il répare souvent de lui-même les raccourcis erronés (info). Mais il est des situations où le comportement du raccourci ne convient pas, et le fichier situé sur le volume amovible n'est pas ouvert (par exemple c'est le fichier d'origine situé sur le disque dur qui est ouvert, ou plus communément le fichier n'est pas trouvé). Est-il possible de s'affranchir de la lettre du lecteur ? Autrement dit, peut-on créer sur un volume amovible un raccourci vers un fichier dudit volume qui fonctionnera quelle que soit la lettre attribuée par le système ? On ne peut pas, à priori, faire de raccourci relatif, l'absence de lettre de lecteur étant refusé. Souvent l'utilisation du raccourci est positive, mais Windows réécrit le raccourci, on le voit en affichant ses Propriétés, pour constater que la lettre a changé en conformité avec la position actuelle du lecteur. Mais ça ne fonctionne pas toujours et la question se pose alors, comment faire pour que les raccourcis fonctionnent quelle que soit la lettre attribuée par le système ? On va voir qu'il est possible de remplacer la lettre par un point.
Nouveau : la nouvelle commande mklink livrée avec Vista permet de créer des liens symboliques relatifs vers des fichiers ou des dossiers, à condition de formater le volume en NTFS. Si on tient compte que la surveillance disque n'est plus automatiquement activée sur Vista, ce procédé, très simple, semble utilisable. Voir plus bas le lien vers l'article sur les Liens NTFS.
Le langage Batch accepte les chemins relatifs. Créer un nouveau fichier avec Bloc-Notes, et le sauvegarder sur le lecteur amovible avec ici pour nom : "_LienRelatif.bat" (l'underscore permet que le fichier soit facilement repérable en restant au début de la liste des fichiers dans Explorer). Voici le contenu à copier dans _LienRelatif.bat ==>
CHCP 1252 set fichier=Lettre d'amour.txt set cheminrelatif=Dossier Relatif\À Françoise Gasan if not exist "\%cheminrelatif%" ( md "\%cheminrelatif%" ) if not exist "\%cheminrelatif%\%fichier%" ( echo.>"\%cheminrelatif%\%fichier%" ) cd /d "\%cheminrelatif%"
start "" . |
Commandes utilisées :
CHCP 1252 permet d'utiliser les caractères accentués et diacritiques pour le nom du fichier et le chemin vers celui-ci (ANSI, unicode).
SET sert à définir une variable. Ces deux variables permettent de modifier facilement le chemin et le nom du fichier. Noter que le chemin ne comporte pas de nom de lettre de lecteur. Dans cet exemple on utilise volontairement des espaces (guillemets nécessaires), ainsi qu'une majuscule accentuée et un caractère diacritique pour vérifier l'action de la commande CHCP.
IF : afin de tester plus rapidement le batch, les dossiers et le fichier sont créés s'ils n'existent pas. C'est le rôle des deux commandes IF qui pourront éventuellement être supprimées une fois l'expérimentation terminée.
CD /D permet de changer de répertoire de travail. Ceci est souhaitable si on veut lancer un programme qui doit fonctionner par défaut dans son dossier.
START permet de lancer une commande tout en continuant à la commande suivante. Ces deux commandes ouvrent le dossier puis le fichier. Noter l'utilisation du point qui désigne le dossier en cours (deux points désigneraient le répertoire parent).
PAUSE n'est nécessaire que pour la mise au point et devra être supprimé ou mis en remarque une fois le Batch adapté et validé.
Le Batch est utilisable depuis n'importe où dans le lecteur.
On arrive à faire tenir les commandes nécessaires dans un simple raccourci en utilisant quelques astuces. Créer un Nouveau raccourci sur le lecteur amovible, et supprimer le contenu de la ligne "Démarrer dans". Régler la ligne Exécuter à Réduite. Dans la ligne Cible coller la commande suivante :
cmd /c cd /d "%cd:~0,2%\Dossier Relatif\À Françoise Gasan"&&start "" "Lettre d'amour.txt"
Terminer en modifiant l'icône du raccourci.
CMD /C lance une Console CMD et y exécute les commandes qui suivent. Pendant la mise au point, on peut remplacer momentanément par CMD /K afin que la Console reste ouverte à la fin du traitement, on peut ainsi lire le déroulement. Plus d'aide sur CMD dans l'aide en ligne (cmd /?) et Aide et Support (Démarrer>Exécuter>HH ntcmds.chm::/ntcmds.htm)
%CD:~0,2% est la combinaison d'une variable et d'un modificateur de variable :
&& permet d'enchaîner les commandes.
Plus d'infos dans Aide et Support en collant dans Exécuter les commandes suivantes :
L'aide en ligne SET /? offre quelques exemples de modifications de variables qui ne sont pas montrés dans Aide et Support.
L'avantage de ce raccourci est la possibilité de
choisir une icône, et de fonctionner en réduit (sans ouvrir de fenêtre).
L'inconvénient est qu'il est plus difficile à éditer.
Pour les plus motivés, il est possible de créer un véritable raccourci qui fonctionnera même si le lecteur change de lettre. Créer le raccourci normalement, puis éditer son contenu avec un éditeur hexadécimal. Identifier le chemin vers la cible et repérer la lettre du lecteur, elle est présente en plusieurs endroits dans le code. La lettre est toujours suivie des deux-points (code 3A). Remplacer le code de la lettre du lecteur par 2E (2E est le code pour le point, qui représente le lecteur courant).
Éditeurs hexadécimaux
L'éditeur hexadécimal utilisé ici est Free Hexa Editor (fhred) car il est plus adapté pour faire les captures d'écrans qui illustrent la suite du propos.
Vous préfèrerez peut-être utiliser EditHexa qui est en français. Son auteur est Éric Dauteuille (tuto).Édition du code d'un raccourci
Un raccourci est en fait un fichier, son extension (.LNK) est cachée.
EditHexa édite le raccourci, et ne demande pas si on préfère éditer la cible.
L'éditeur fhred pose lui la question de savoir si on veut ouvrir le fichier que pointe le raccourci ou le raccourci lui-même ==>
Traduction du texte de la boite ci-contre : Vous tentez d'éditer un raccourci.
Cliquez sur Oui si vous voulez éditer le fichier cible du raccourci,
ou cliquez sur Non si vous voulez éditer le raccourci lui-même.
Choisir Annuler pour abandonner.
- Cliquer Oui pour éditer la cible du raccourci
- Cliquer Non pour éditer le raccourci lui-mêmePetit bug : la boite ci-dessus n'apparait pas si on utilise Open (Menu File) ou l'icone habituelle de la Barre d'outils.
- Contournement 1 : créer sur le Bureau un raccourci vers fhred.exe et glisser et lâcher le raccourci à éditer dessus
- Contournement 2 : faire glisser le raccourci à éditer et le lâcher sur la fenêtre de frhed
- Contournement 3 : créer un raccourci vers fhred.exe dans le dossier SendTo et utiliser le Menu Contextuel (clic droit) et "Envoyer vers"
Pour ouvrir le dossier SendTo : Démarrer>Exécuter>sendto
Exemple de scénario
On copie sur la clé un dossier du disque C:\ accompagné d'un raccourci pointant sur un document. Voici les propriétés du raccourci sur la clé avant son utilisation :
En cliquant sur ce raccourci, Windows trouve sur la clé le document qui a été déplacé en même temps que le raccourci. Le document s'ouvre normalement, et on constate que les Propriétés du raccourci ont été mises à jour :
En éditant le raccourci, on identifie facilement la lettre B du volume. Pour ne pas confondre avec d'éventuelles autres lettres B, remarquer qu'une adresse commence par B:\ avec, bien sûr, une petite exception pour la dernière adresse codée d'une façon espacée ==> B : \
Codes utiles :
On a donc, côté code, deux groupes 42 3a 5c, et un dernier groupe 42 00 3a 00 5c, ce dernier repéré par les flèches.
- B ==> 42
- : ==> 3a
- \ ==> 5c
- . ==> 2e
Il faut remplacer les trois occurrences du code 42 par le code 2E (point)
La vue suivante montre que le code 2e a remplacé les trois codes 42, le panel de droite montre un point à la place de chaque lettre de volume B ==>
On a également la possibilité de supprimer le nom de la clé, ici FRAMAKEY, en remplaçant son code par des 00.
Sauvegarder et immédiatement protéger le raccourci de toute modification en lui donnant l'attribut R (ReadOnly) avec la commande ATTRIB.
Utiliser la complétion de commande en appuyant sur TAB au lieu de taper le nom du fichier évitera les erreurs.
Remarquer l'extension lnk du raccourci ==>
Le raccourci n'enregistrera ainsi plus la lettre de la clé lors de son utilisation.
Voici ses nouvelles Propriétés :
Si on clique sur OK on a droit à message de Windows. Il faut fermer la fenêtre avec la croix de la Barre de Titre.
Cas du raccourci copié
Si on a l'idée de copier un raccourci existant depuis le disque dur vers la clé, observer que le nom de l'ordinateur et le nom du volume sont notés dans le code du raccourci. Il suffit d'utiliser le raccourci au moins une fois depuis le volume amovible sur lequel il a été déplacé ou copié et le nom de volume sera remplacé par celui de la clé. Si nécessaire on peut s'en affranchir totalement et remplacer le code du nom de volume par des zéros. Ceci corrige les cas où le raccourci est détecté comme erroné, ou bien continue d'ouvrir le document du disque dur au lieu d'ouvrir le document du même nom présent sur la clé. Même chose si le nom de l'ordinateur est présent, remplacer son code par des 00.
Il est possible, grâce à la mécanique des Points d'Analyse (Reparse Points), de créer des Liens Symboliques Relatifs. C'est très facile avec la nouvelle commande mklink apparue sur Vista et W7, ou, si vous êtes allergique aux lignes de commandes, avec Link Shell Extension. Inconvénient, il faut que le volume amovible soit formaté NTFS. Il est vraiment regrettable que ça ne marche pas avec le format exFAT dédié aux volumes amovibles. Toutes les infos sur l'article consacré aux Liens NTFS, et en particulier, le passage sur les Liens Relatifs.
Si vous êtes amené à vous servir souvent d'ordinateurs différents, vous trouverez peut-être pratique de créer en un clic des raccourcis sur le Bureau de vos outils, fichiers, et dossiers préférés contenus sur votre clé USB. JC Bellamy a créé le script raccourci.vbs facilitant l'opération.
Voici une autre solution proposée par Carine avec l'aide de nircmd, le fameux outil de Nir Sofer. ShortCutUSB.bat installe sur le Bureau les raccourcis des objets listés dans un fichier liste.txt à créer sur la clé USB :
@echo off set usb=%~d0 for /f "tokens=1 delims=," %%a in (liste.txt) do ( if exist "%userprofile%\Bureau\%%~na.lnk" ( echo le Raccourci pour %%a existe deja… ) else ( nircmd.exe shortcut "%usb%\%%a" "~$folder.desktop$" "%%~na" echo raccourcis %%~na cree echo %%~nxa >>delist.txt ) ) pause |
Noter la création de delist.txt qui permet au batch de nettoyage DelShortCutUSB.bat de laisser le Bureau dans l'état où on l'a trouvé :
@echo off set usb=%~d0 for /f "tokens=1 delims=," %%a in (delist.txt) do ( nircmd.exe execmd del "~$folder.desktop$\%%~na.lnk" ) |
KB307844 : Comment faire pour modifier des attributions de lettres de lecteur dans Windows XP
On en parle
http://forum.pcastuces.com/raccourcis_dans_cle_usb-f1s171841.htm
:o)
http://forum.pcastuces.com/envoyer_vers_send_to-f3s4629.htm
Merci d'avoir lu jusqu'ici !
Retour au début
JF
Les restes du site
Publié le 12/08/2008