Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[R]Savoir combien de variables accompagnent le call
Auteur Message
Répondre en citant
Message [R]Savoir combien de variables accompagnent le call 
Bonjour, je rame un peu je cherche une solution pour "scanner" les variables d'un "call:" je m'explique

Code:
@echo off
call:scan_variable var1 var2 var3 var4
pause
:scan_variable
setlocal enabledelayedexpansion
set nbr=0
:loop_scan_variable
set /a nbr+=1
if defined %!nbr! (
echo %!nbr!
goto loop_scan_variable
)
exit /b


j'aimerai pouvoir tester %1 %2 en regardant si il y a quelque chose dedans afin de compter combien de variables accompagnent le call


Merci d'avance,



Dernière édition par programme le Mar 24 Juil 2018 - 11:18; édité 1 fois

______________________________________________________

Programme
Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R]Savoir combien de variables accompagnent le call 
Pour compter le nombre d'arguments, il suffit de jouer avec "%*"
Plus d'info ici : https://ss64.com/nt/syntax-args.html

https://ss64.com/nt/syntax-args.html a écrit:
%* in a batch script refers to all the arguments (e.g. %1 %2 %3 %4 %5 ...%255)
only arguments %1 to %9 can be referenced by number.




Donc à partir de ça on peut faire comme ça :
Code:
@echo off

call :scan_variable var1 var2 var3 var4

pause>nul


:scan_variable
setlocal enabledelayedexpansion

set nb=-1
for %%a in (%*) do (
  set /a nb+=1
  set Args[!nb!]=%%~a
)
set /a Args.length=nb+1


if !nb! equ 0 (
  echo;No Argument^^!
) else if !nb! equ 1 (
  echo;1 Argument^^!
) else if !nb! gtr 1 (
  echo;!Args.length! Arguments^^!
)

echo;
for /l %%i in (0,1,!nb!) do echo;   Args[%%i]=!Args[%%i]!

endlocal
exit /b



Mais ça ne se limite pas à ça, on peut jouer avec "%*" comme on veut car au final ça se comporte comme une chaîne de caractères que l'on peut découper comme on veut,
voici un exemple concret qui permet de "simuler" des objets :
Code:
@echo off
setlocal enabledelayedexpansion

call :label ^
{ ^
    "command":"salut" ^
    "username":"%username%" ^
    "ce_que_tu_veux":"le contenu" ^
    "value":"content" ^
}

pause>nul&exit

:label
  call :get_object My_Object %*
 
  echo;Access Object Method 1:
  echo;  My_Object.command=!My_Object.command!
  echo;  My_Object.ce_que_tu_veux=!My_Object.ce_que_tu_veux!
  echo;
  echo;
  echo;Access Object Method 2:
  echo;  + My_Object.keys=!My_Object.keys!
  echo;       [!My_Object.keys.length! Key]
  for %%a in (!My_Object.keys!) do echo;      - My_Object.%%~a=!My_Object.%%~a!
Exit /b

:get_object <object_name> <args>
  set %~1.Keys=
  set %~1.String=
  set %~1.Keys.length=0
  for %%p in (%*) do for /f "tokens=1,* delims=:" %%1 in ("%%~p") do (
    set key=%%~1&set key=!key:"=!
      if not "!key!"=="%~1" (
      if not "!key:{=}!"=="}" (
        set "%~1.!key!=%%~2"
        set %~1.Keys=!%~1.Keys! "!key!"
        set /a %~1.Keys.length+=1
      )
    )
    set %~1.String=!%~1.String! "%%~1":"%%~2"
  )
  set %~1.Keys=!%~1.Keys:~1!
Exit /b


Et voici une implémentation partielle de la poo (programmation orientée objet) en pure batch que j'avais faite et qui pourrai peut-être t'intéresser : http://batch.xoo.it/t5729-POO.htm




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R]Savoir combien de variables accompagnent le call 
Flammrock a écrit:
Pour compter le nombre d'arguments, il suffit de jouer avec "%*"
Plus d'info ici : https://ss64.com/nt/syntax-args.html

https://ss64.com/nt/syntax-args.html a écrit:
%* in a batch script refers to all the arguments (e.g. %1 %2 %3 %4 %5 ...%255)
only arguments %1 to %9 can be referenced by number.




Donc à partir de ça on peut faire comme ça :
Code:
@echo off

call :scan_variable var1 var2 var3 var4

pause>nul


:scan_variable
setlocal enabledelayedexpansion

set nb=-1
for %%a in (%*) do (
  set /a nb+=1
  set Args[!nb!]=%%~a
)
set /a Args.length=nb+1


if !nb! equ 0 (
  echo;No Argument^^!
) else if !nb! equ 1 (
  echo;1 Argument^^!
) else if !nb! gtr 1 (
  echo;!Args.length! Arguments^^!
)

echo;
for /l %%i in (0,1,!nb!) do echo;   Args[%%i]=!Args[%%i]!

endlocal
exit /b



Mais ça ne se limite pas à ça, on peut jouer avec "%*" comme on veut car au final ça se comporte comme une chaîne de caractères que l'on peut découper comme on veut,
voici un exemple concret qui permet de "simuler" des objets :
Code:
@echo off
setlocal enabledelayedexpansion

call :label ^
{ ^
    "command":"salut" ^
    "username":"%username%" ^
    "ce_que_tu_veux":"le contenu" ^
    "value":"content" ^
}

pause>nul&exit

:label
  call :get_object My_Object %*
 
  echo;Access Object Method 1:
  echo;  My_Object.command=!My_Object.command!
  echo;  My_Object.ce_que_tu_veux=!My_Object.ce_que_tu_veux!
  echo;
  echo;
  echo;Access Object Method 2:
  echo;  + My_Object.keys=!My_Object.keys!
  echo;       [!My_Object.keys.length! Key]
  for %%a in (!My_Object.keys!) do echo;      - My_Object.%%~a=!My_Object.%%~a!
Exit /b

:get_object <object_name> <args>
  set %~1.Keys=
  set %~1.String=
  set %~1.Keys.length=0
  for %%p in (%*) do for /f "tokens=1,* delims=:" %%1 in ("%%~p") do (
    set key=%%~1&set key=!key:"=!
      if not "!key!"=="%~1" (
      if not "!key:{=}!"=="}" (
        set "%~1.!key!=%%~2"
        set %~1.Keys=!%~1.Keys! "!key!"
        set /a %~1.Keys.length+=1
      )
    )
    set %~1.String=!%~1.String! "%%~1":"%%~2"
  )
  set %~1.Keys=!%~1.Keys:~1!
Exit /b


Et voici une implémentation partielle de la poo (programmation orientée objet) en pure batch que j'avais faite et qui pourrai peut-être t'intéresser : http://batch.xoo.it/t5729-POO.htm



Merci ! Toujours là pour m'aider rapidement et efficassement Okay Okay
Intéressant le POO mais je ne pense pas être encore prêt à programmer comme ça Neutral peut être plus tard

Merci quand même




______________________________________________________

Programme
Skype
Répondre en citant
Message [R]Savoir combien de variables accompagnent le call 
salut

hs:
programme, je ne pense pas qu'il est indispensable que
tu cites systématiquement les messages auxquels tu
réponds. Et encore plus quand ils sont longs. Et encore
plus plus si c'est pour répondre par deux lignes à la fin.

Sinon pour en revenir au sujet, ne pas oublier la commande
shift.



Message [R]Savoir combien de variables accompagnent le call 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch