Récupération d'une Donnée (Lettre du lecteur amovible)

Résolu/Fermé
Glyphe - 5 mai 2022 à 12:09
brucine Messages postés 14147 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 14 avril 2024 - 5 mai 2022 à 20:51
Bonjour, j'aimerais pouvoir sélection la lettre du lecteur amovible pour voir ensuite aller chercher un fichier dedans.


cls

@Echo Off

FOR /F ["delims= "] %%G IN (wmic logicaldisk where drivetype^=2 get deviceid, volumename | find "UDISK") DO Echo %%G

Set /p ip=Ip Imprimante :

cscript C:\Windows\SysWOW64\Printing_Admin_Scripts\fr-FR\prnport.vbs -a -r %ip% -h %ip% -o raw -n 9100
cls
if %errorlevel% LEQ 1 goto us
Echo Port %ip% Ouvert
:us
cscript C:\Windows\SysWOW64\Printing_Admin_Scripts\en-US\prnport.vbs -a -r %ip% -h %ip% -o raw -n 9100
Echo Port %ip% Open

echo. --------------------------------------------------------------------------------------------------
@Echo Veuillez Patienter pendant l'installatation
rundll32 printui.dll, PrintUIEntry /if /f "%Disk%\ADDPRINTER\EUPD_Core_x64_27005\E_JFB0DE.INF" /w /r "%ip%" /m "EPSON Universal Print Driver"
:end
Echo %errorlevel%
pause
Echo Imprimante Installer :)

Control Printers


J'ai l'erreur :

%%G était inattendu.
A voir également:

3 réponses

barnabe0057 Messages postés 14439 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 14 avril 2024 4 905
Modifié le 5 mai 2022 à 14:42
Bonjour,

Essaie en écrivant ta boucle FOR comme ceci :
FOR /F "delims= " %%G IN ('wmic logicaldisk where drivetype^=2 get deviceid^,volumename ^| find "UDISK"') DO echo.%%G



1
Merci beaucoup,

j'ai aussi trouvé une solution plus simple .

rundll32 printui.dll, PrintUIEntry /if /f "%CD:~0,1%:\ADDPRINTER\EUPD_Core_x64_27005\E_JFB0DE.INF" /w /r "%ip%" /m "EPSON Universal Print Driver"


%CD:~0,2% pour afficher directement la lettre de la ou et lancer le .bat

merci encore.
0
brucine Messages postés 14147 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 14 avril 2024 1 770
5 mai 2022 à 20:51
Bonjour,

Il faut prendre garde aux faux amis:
%~dp0 et %CD:~0,1% me retournent respectivement le chemin et la lettre de lecteur de la clé d'où le batch est lancé (et donc a fortiori ne s'appliquent pas si le batch est lancé depuis le PC), tandis que nombre de clés n'ont pas de valeur volumename faute qu'un LABEL ait été attribué.

Dans ce dernier cas de figure, il existe au moins 2 façons de retourner la lettre d'une clé USB selon des critères spécifiques.

La plus simple consiste à tester sur cette clé l'existence d'un fichier spécifique et improbable, supposons que j'y ai créé un fichier ascii.txt vide, il me suffit alors d'écrire:


@echo off

FOR %%A IN (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 IF EXIST %%A:\ascii.txt SET LECT=%%A:\


Si je tiens à utiliser wmic, il est alors plus sain d'utiliser une autre propriété spécifique à cette clé, le numéro de série, qui est persistant sur un PC déterminé tant que la clé n'est pas formatée, et que j'obtiens par VOL; par exemple, VOL N: me retourne:


Le volume dans le lecteur N n’a pas de nom.
Le numéro de série du volume est 8072-A806


Comme prévu, le volumename échoue, je dois utiliser le numéro de série sans tiret: 8072A806, et je peux retourner la lettre de lecteur suivie de :\ comme suit:


@echo off

SET numserie=8072A806
SET chem=\:

FOR /F "skip=1 tokens=1,2 delims=: " %%G in ('wmic logicaldisk where drivetype^=2 get name^,volumeserialnumber^') DO SET "letter=%%G" & SET "serie=%%H" & CALL :PROCESS
GOTO :EOF

:PROCESS
IF %serie%==%numserie% SET "lecteur=%letter%%lecteur%%chem%"
IF %serie%==%numserie% echo %lecteur%
pause >nul

:EOF
0