15/11/2024

Batch

Détecter un périphérique en fonction d’un fichier

I. Présentation

Si vous souhaitez exécuter un script qui effectuera une action entre la machine et une clé USB par exemple, il faudra vérifier le script avant chaque exécution pour voir si la lettre indiquée dans le script correspond à la lettre du lecteur de votre clé USB. Du coup, c'est un peu ennuyeux de devoir faire cela à chaque fois que vous changez de machine. Pire encore, imaginez que ce script sera utilisé par des personnes qui ne connaissent pas grand chose en informatique et qui ne sont pas capables de vérifier la cohérence du script, vous faites comment ? Nous allons voir dans ce tutoriel une solution qui consiste à accéder aux différentes lettres de lecteur disponible jusqu'à trouver un fichier précis, qui devra être indiqué dans le script. Dès que ce fichier sera trouvé sur le périphérique, le script se dira "J'ai trouvé le lecteur sur lequel je dois effectuer l'opération, je peux donc commencer". Ce script utilise le langage Batch, il est donc exécutable à partir d'un poste sous Windows.

II. Le code complet

Voici le code complet du script, des explications seront apportées dans la partie suivante.

@echo off
set FILENAME=autorun.inf
set DRIVERLIST=a,b,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,d,c
FOR %%d in (%DRIVERLIST%) do (
FOR /F "delims=" %%f in ('dir /B /S %%d:\%FILENAME%') do (
set LETTER=%%d
IF EXIST "%%d:\%FILENAME%" goto TRAITEMENT
)
)
:TRAITEMENT
echo Fichier trouvé dans le lecteur %LETTER% !
--- Votre code de traitement à insérer ici
exit

 

III. Explications

Avoir un bout de code c'est bien mais avoir des explications pour l'accompagner c'est encore mieux et ça vous permet de comprendre ce que vous faites. D'un point de vue global voici comment fonctionne le script :

On définit un nom de fichier à chercher (variable FILENAME) et un ensemble de lettres correspondant aux lettres de lecteurs à vérifier (variable DRIVERLIST). Ensuite, grâce à une boucle FOR on fait une vérification (DO : Faire...) où l'on prend une lettre de lecteur en commençant par la première de la liste pour vérifier sur ce lecteur si un fichier se nomme de la valeur FILENAME. Pour vérifier cela on refait une deuxième boucle FOR à l'intérieur de la première où l'on liste tous les fichiers du lecteur pour voir si un nom de fichier correspond à ce qu'on cherche. Dès que le fichier est trouvé (IF EXIST : S'il existe...), on va à l'étiquette TRAITEMENT c'est à dire qu'on se déplace dans le code jusqu'à trouver le début de l'étiquette TRAITEMENT et on continue à exécuter le code. C'est là que votre code de traitement devra être placé et devra intervenir pour effectuer vos opérations sur le lecteur.

Quelques informations en plus :

  •  "set" : Permet de définir des variables, représentées par FILENAME et DRIVERLIST dans ce programme.
  •  "dir" : Cette commande permet de lister le contenu d'un répertoire, l'option /B permet de lister uniquement les noms de fichiers (et non la date de création, etc...) et l'option /S permet de lister l'ensemble des répertoires et sous-répertoire, donc toute l'arborescence.
  •  "delims=" : Ceci permet d'indiquer un délimiteur qui dans notre cas est vide puisque lors du listing des fichiers, il n'y a pas de caractères en fin de ligne.
  •  "goto" : Cette directive permet de dire "Aller à..." où on indique après le nom d'une étiquette afin d'aller à un endroit du programme. Dans notre cas TRAITEMENT.

V. Pourquoi les lettres C et D à la fin ?

Il vaut mieux placer les lettres C et D à la fin de la liste car ce serait très long de scanner l'ensemble des fichiers de la partition C qui est en général la partition système, et D peut être éventuellement une partition de données. De plus si l'on cherche un autorun, on a peu de chance de le trouver.

Si vous avez des améliorations à me proposer ou une solution alternative, n'hésitez pas à laisser un commentaire ou directement utiliser le forum pour en discuter.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

2 commentaires sur “Détecter un périphérique en fonction d’un fichier

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.