Quelques notions importantes sur les paramètres en scripting de commandes NT
salut,
ce petit post n'est pas une introduction sur la notion des paramètres
Pour ceux qui ne savent pas qu'est ce qu'un paramètre, vous pouvez voir ceci:
Code:
hh ntcmds.chm::/call.htm
difference entre %1 et %1%
---------------------------
en parcourant un peu le net j'ai observé que des batcheurs utilsent la syntaxe %1% au lieu de %1, ce choix ce porte essentiellement sur la coloration syntaxiques de quelques éditeurs de cette syntaxe.
malheureusement, cette syntaxe "%1%" peux poser quelques problèmes:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| @echo off
Setlocal
call :_1 10
call :_2 dev
call :_3 dev %%%%1%%%%
call :_3 dev %%%%1 ::
endlocal
pause & exit /b
:_1
echo.
echo %0
set /A a=%1%*2
set /A b=%1*2
echo %%1%% %a%
echo %%1 %b%
goto:eof
:_2
echo.
echo %0
echo %%1%% %1%eloppez %
echo %%1 %1eloppez %
goto:eof
:_3
echo.
echo %0 %2
%3 for %%a in (%1%) do echo %%a
for %%a in (%1) do echo %%a
goto:eof |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
:_1
%1% 10102
%1 20
:_2
%1% dev
%1 developpez
:_3 %1%
deva
for
%a
in
(dev
:_3 %1
dev |
la commande shift
------------------
la commande shift est l'une des commandes internes, elle permet de décaler la position des paramètres et elle ne s'utilise qu'avec les fichiers de commandes, c'est à dire qu'on ne peux pas l'utiliser interractivement.
voici un petit exemple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| @ECHO OFF
Set @SFUNC=CALL :DECAL A B C D
%@SFUNC%
EXIT /B
:DECAL
echo %1
shift /0
echo %1
shift /0
echo %1
shift /0
echo %1
shift /0
echo %1
GOTO :EOF |
Code:
1 2 3 4 5
| A
B
C
D
Commande ECHO désactivée. |
je vous conseille de voir l'aide de cette commande, qui est plus complète.
Code:
hh ntcmds.chm::/shift.htm
et pour finir, voici un petit exemple qui se base sur la commande "Shift".
Code:
1 2 3 4 5 6 7 8
| @ECHO OFF
SEt X=%1||%0 "(1 1 9)" A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
SEt /=%2& S%6T #=%4& S%6T ##=%5& S%6T @=%6& SET ###=%~1
%7OR /L %%? In %###% %5o S%9i%7t
F%7R %%%2 %1n (%4 %5 %7 %8) D%7 S%@%t %%%2=%%%2
F%7R /%4 %%? %1%6 %###% %##%%7 sh%1ft
Echo %##%%@%%5%@%%L%%L%%O%%P%%P%%@%%9.%#%%O%%M%
P%/%%4%2E |
extraction de données par positionnement de paramètres
----------------------------------------------------------
les paramètres nous permettent aussi de manipuler des chaînes de caractères, cette technique dépend fortement de la chaîne de caractères, et n'est malheureusement pas générique
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @Echo OFF
SET STR=Adresse Email : walid2mi@gmail.com
Pushd "%Temp%"
Echo(%str% | findstr /i "^Adresse email" > _adresse.bat
>adresse.bat Echo set email=%%3
call _adresse.bat
echo(%email%
erase _adresse.bat adresse.bat
Popd
exit /b |
paramètres %0
----------------------------------------------------
si on utilise le paramètre %0 dans un sous-programme il va nous retourner le nom du label, par contre si on appel un autre script de commande par CALL le paramètre %0 va se referer au nom du fichier de commande appelé.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| CMD> type hello.bat
@Echo OFF
Call :label a
Call hello2 a
pause
exit /b
:label
echo %0 %1
CMD> type hello2.bat
echo %0 %1
CMD> hello.bat |
expansion de références d'arguments
--------------------------------------
les paramètres supportent les mêmes modificateurs de variables (voir: HOWTO variables 1/2)
Code:
1 2 3 4 5 6 7 8 9 10
| @echo off
for %%# In (attrib.exe cipher.exe command.com) do Call :FindFiles %%#
pause
Exit /b
:FindFiles
echo(%~tz$PATH:1
Goto:EOF |
Code:
1 2 3 4
|
14/04/2008 13:00 12288 D:\WINDOWS\system32\attrib.exe
14/04/2008 13:00 57344 D:\WINDOWS\system32\cipher.exe
14/04/2008 13:00 52103 D:\WINDOWS\system32\command.com |
on peux aussi utiliser la syntaxe %* qui se refère à tous les paramètres.
Code:
1 2 3 4 5 6 7
| @echo off
Call :label A B C
exit /b
:label
echo %%1 %1
echo %%* %* |