salut,
Beaucoup de batcheurs croient que les paramètres sont le seul moyen d'alimenter nos scripts par des données
par exemple ce script permet de grouper les extensions des fichiers.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| :::::::::::::::::::::::::::::::::::::::::::::
:USAGE
:: GroupbyExtension <Path>
:PARAMETER <Path>
:: Par defaut c'est le chemin en cours
:EXAMPLE
:: GroupbyExtension "c:\a b c\d"
::
:::::::::::::::::::::::::::::::::::::::::::::
@Echo oFF&Setlocal Enabledelayedexpansion
set $Path="%~1.\"
For /f "Delims=" %%i in ('dir %$Path% /a-d/b') do (
Set /a %%~xi+=1
)
Echo Count Extension
Echo ----- ----------
For /f "tokens=1* Delims==" %%o In ('set .') Do (
Set cnt=0000%%p
Echo(!Cnt:~-4! %%o
)
goto :eof |
notre script sera executer ainsi:
c:\> GroupByExtension d:\windows\system32
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Count Extension
----- ----------
0001 .avi
0001 .BAK
0013 .bmp
0002 .dat
0003 .dll
0010 .exe
0010 .ini
0030 .log
0001 .Manifest
0001 .OLD
0001 .pif
0002 .prx
0001 .scf
0003 .tmp
0003 .txt |
comme vous pouvez le voir nous pouvons alimenter notre script par des données par le biais de paramètres, dans notre cas l'argument de notre commande sera capturer par les réferences d'arguments (%1..%9)
On peux alimenter nos scripts par l'entrée du pipeline, de deux manières, la première cassera la progression du pipeline à la première chaîne de caractères rencontrée, et la seconde, jouera le rôle d'un filtre
1 2 3 4 5 6 7 8 9 10
| # BREAK
c:\temp> type method1.cmd
@echo off
set /p FirstLine=
rem recupération de la première entrée du pipeline
rem et un petit traitement
echo première ligne: "%FirstLine: =" "%"
c:\temp> dir|method1.cmd |
1 2 3 4 5 6 7 8 9 10 11 12 13
|
# PROGRESS
c:\temp> type method2.cmd
@echo off
for /f "tokens=*" %%a in ('find /n /v ""') do (
set "n=%%a"
setlocal enabledelayedexpansion
echo(# !n:*]=!
endlocal
)
c:\temp> dir | method2.cmd |
revenons maintenant à notre script initial..on peux ainsi le changer pour qu'il traite l'entrée du pipeline:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
:::::::::::::::::::::::::::::::::::::::::::::
:USAGE
:: echo <chemin> | GroupbyExtension
:EXAMPLE
:: echo c:\ | GroupbyExtension
::
:::::::::::::::::::::::::::::::::::::::::::::
@Echo oFF&Setlocal Enabledelayedexpansion
Set /P $Path=
For /f "Delims=" %%i in ('dir %$Path% /a-d/b') do (
Set /a %%~xi+=1
)
Echo Count Extension
Echo ----- ----------
For /f "tokens=1* Delims==" %%o In ('set .') Do (
Set cnt=0000%%p
Echo(!Cnt:~-4! %%o
)
goto :eof |
désormais, il sera executer ainsi:
echo d:\windows\system32 | GroupByExtension.cmd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| Count Extension
----- ----------
0001 .avi
0001 .BAK
0013 .bmp
0002 .dat
0003 .dll
0010 .exe
0010 .ini
0030 .log
0001 .Manifest
0001 .OLD
0001 .pif
0002 .prx
0001 .scf
0003 .tmp
0003 .txt |
walid
Partager