Se connecter avec
S'enregistrer | Connectez-vous

batch - utilisation de variables

Dernière réponse : dans Programmation

Bonjour,

Depuis peu on m'a demandé d'écrire un script batch. Jusqu'à présent tout va à peu pret bien.
Voilà où ça ne va plus je vous mets le bout de code
  1. for /F %%A in (%P_LOGS%\list.txt) do (
  2. %P_TOOLS%\dvget.exe %%A %RO% %OID% > %P_LOGS%\t3-%%A.txt
  3. type %P_LOGS%\t3-%%A.txt
  4.  
  5. set /p s-%%A=<%P_LOGS%\t3-%%A.txt
  6.  
  7. )

C'est au niveau du set que ça coince je souhaite que ma variable soit du type nomVariable-argument et pouvoir lui affecter une valeur, et me resservir de cette variable facilement plus tard.

Si quelqu'un pouvait éclairer ma lanterne.

Merci d'avance

Autres pages sur : batch utilisation variables

Lassé par la pub ? Créez un compte
Expert Programmation

Eclairons ta lanterne :

Tu as un problème d'expansion retardée de variables d'environnement :o 

Pour en savoir plus, demande l'aide de la commande SET :
C:\> HELP SET


Pour en savoir encore plus, demande l'aide de la commande SETLOCAL :
C:\> HELP SETLOCAL
Notamment en ce qui concerne ENABLEDELAYEDEXPANSION

Citation :
Eclairons ta lanterne :

Tu as un problème d'expansion retardée de variables d'environnement :o 

Pour en savoir plus, demande l'aide de la commande SET :
C:\> HELP SET


Pour en savoir encore plus, demande l'aide de la commande SETLOCAL :
C:\> HELP SETLOCAL
Notamment en ce qui concerne ENABLEDELAYEDEXPANSION


Re bonjour,

Toujours dans le registre des variables est il possible de mettre dans une variable le résultat d'un commande DOS un peu complexe ?

Voilà l'exemple
  1. set status=find /c "%OID%" %P_TOOLS%dvget.exe %network%%%i %RO% %OID%

et voici le résultat affiché par
  1. echo %status%

  1. find /c "1.3.6.1.2.1.2.2.1.7.1" ..\tools\dvget.exe 192.168.21.231 public 1.3.6.1.2.1.2.2..7.1

J'aurai souhaité avoir directement dans la variable status le nombre de ligne contenant ma chaine de caractere.
Expert Programmation

Non.

Si tu veux récupérer le résultat de la commande FIND, utilise ERRORLEVEL.
0: Trouvé
1: Pas trouvé
Autre: Erreur

Par ailleurs, relis l'aide de FIND. Ta commande n'a rien à voir avec ce que fait FIND.

Je souhaite utilisé FIND pour compter le nombre de lignes comportant une chaine de caractères donnée. C'est pourquoi j'utilise
/C Displays only the count of lines containing the string.

Sinon y a-t-il une autre fonction pour récupérer sous forme de chiffre (pour permettre une comparaison) le nombre de lignes d'un fichier contenant une string donnée ?
Expert Programmation

Non, c'est ce qui suit FIND qui m'étonne :
FIND [option] "PATERN" fichiers


Toi tu écris
FIND [option] "PATERN" commande complète


Je l'écrirais plustôt comme ça :
commande paramètres | FIND /C "PATERN"


Pour mettre un résultat dans une variable, on peut détourner la commande FOR.

Exemple :
FOR /F %%i in ( 'commande^|FIND /C "PATTERN"' ) DO SET A=%%i


Tips: Le chapeau est là pour échapper le signe |

Citation :

Pour mettre un résultat dans une variable, on peut détourner la commande FOR.

Exemple :
FOR /F %%i in ( 'commande^|FIND /C "PATTERN"' ) DO SET A=%%i


Tips: Le chapeau est là pour échapper le signe |

tiens merci du conseil
pour j'utilise un fichier tempaire couplé a un [inlinecode]set /<je sais plus quel switch>[/inlinecode]¹


-------------------
¹ : NEED !!!

Merci ça avance doucement mais surement :) 
Une petite question tout de même que je n'arrive pas à résoudre :
comment faire pour utiliser des variables

set /a Var2=Var2+1
set /p nb%Var2%=<%P_LOGS%\snmptest-%Var2%.txt
echo %nb%Var2%%

Donc en fait j'ai par exemple Var2=2 et j'aimerai avoir une variable nb2 puis au coup suivant Var2=3 et nb3 donc ma tentative d'écrire sous la forme nb%Var2% mais je n'arrive pas à afficher cette valeur ensuite :( 
Expert Programmation

Oh là !!! Tu essaie de faire des noms de variables variables imbriquées !!!!!

Fais simple. Ligne 3 :
echo nb%Var2%


Rappelle-toi que juste au moment d'exécuter une ligne ou un bloc, DOS transforme (expend) les variables en leur valeur (D'où les soucis l'expension retardée)
Lassé par la pub ? Créez un compte