[Batch] selection d'une partie de chaine de caractère

selection d'une partie de chaine de caractère [Batch] - Shell/Batch - Programmation

Marsh Posté le 24-06-2014 à 11:30:32    

Bonjour,
 
Je voudrais sortir un fichier txt qui contient le nom de l'imprimante par défaut de l'utilisateur. J'y suis donc arriver mais le problème que je n'arrive pas à résoudre est que j'aimerais changer une partie de la chaîne de caractère avant que le fichier txt soit créé pour être utilisé sur un script de démarrage de session (que j'ai également)pour utiliser le fichier pour changer l'imprimante par défaut sur un parc informatique (j'ai penser le faire avec l'AD mais les imprimantes ne dépendent pas des groupes d'utilisateurs.  
 
Je m'explique:
 

Citation :

@echo off
Rem récupère la clef de registre contenant l'imprimante par defaut et supprime toutes les options à "," derrière
for /F "eol=, tokens=1,2,3,4 delims=, " %%i in ('REG QUERY "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /s^|find "winspool"') do set TEST=%%i
 
Rem créer un variable test contenant ce que renvoi la fonction for au dessus
set TEST=%TEST%
 
Rem Ecrit la variable dans le fichier txt
echo %TEST%>P:\ImpDefaut.txt
 
Rem Récupère le nom de l'imprimante en 4 variables et la met dans une seule
FOR /f "tokens=1,2,3,4,5,6" %%i in ('find /i "REG_SZ" "P:\ImpDefaut.txt"') do set IMP=%%k %%l %%m %%n


 
Cette partie du code m'extrait bien l'imprimante sous la forme \\SRV1\nom_imprimante et j'aimerais ne pas avoir en sortie le serveur mais juste nom_imprimante
 
Quelqu'un aurais t'il une astuce pour cela ?  
Merci d'avance.


Message édité par krait820 le 24-06-2014 à 15:30:46
Reply

Marsh Posté le 24-06-2014 à 11:30:32   

Reply

Marsh Posté le 25-06-2014 à 07:12:33    

Voici un petit programme batch qui découpe une chaine en fonction des antislashs (barre oblique inversée) :

set IMP="\\SRV1\nom_imprimante"
for /f "tokens=1,2,3 delims=\\ " %%a in ("%IMP%" ) do set un=%%a&set serveur=%%b&set imprimante=%%c
echo.un: %un%
echo.Serveur  : %serveur%
echo.Imprimante : %imprimante%


Comme il n'y a rien entre les deux premiers antislashs, la première variable est vide.
La seconde affiche le nom du serveur.
La troisième, le nom de l'imprimante.

Reply

Marsh Posté le 25-06-2014 à 07:52:42    

Merci pour la réponse, j'ai finalement trouver une autre solution en ne sortant que le nom de l'imprimante sur le fichier texte avec ce code.
 

Citation :

@echo off
Rem récupère la clef dde registre contenant l'imprimante par defaut et supprime toutes les options à "," derrière
for /F "eol=, tokens=1,2,3,4 delims=," %%i in ('REG QUERY "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows" /s^|find "winspool"') do set TEST=%%i
Rem créer un variable test contenant ce que renvoi la fonction for au dessus
set TEST=%TEST%
Rem Ecrit la varaible dans le fichier txt
echo %TEST%>C:\ImpDefaut.txt
Rem Récupère le nom de l'imprimante en 4 variables et la met dans une seule
FOR /f "tokens=1,2,3,4,5,6" %%i in ('find /i "REG_SZ" "C:\ImpDefaut.txt"') do set IMP=%%k %%l %%m %%n
 
::récupère le dernier élément du path imprimante
 
for %%a in (%imp%) do set $imp=%%~na
 
Rem Ecrit la variable IMP dans le fichier txt
echo %$IMP%>C:\ImpDefaut.txt

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed