template pour script batch win32

Creation: 17 aout 2016
Mise à jour:
Version: 1.0
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c) 2016 Jean-Louis BICQUELET-SALAÜN

un template pour dos

Le template présenté ici présente les particularitées suivantes

  • un entete
  • la gestion du type de système
  • la gestion des options passées en argument
  • la gestion du nombre d'arguments (à l'aide d'une fonction ou non)
  • l'affichage d'un usage
  • l'extraction d'une documentation technique incluse dans les commentaire

explication du code

1) pas d'écho
@echo off
2) cartouche d'entete
::******************************************************
::~ usage:   $NOM
::~ 
::~          $DESCRIPTION
::~ 
::~ date:    $DATE
::~ auteur:  jean-louis Bicquelet
::~ version: 1.0 $DATE initiale
::******************************************************
3) définition des variables globales
:: variables globales

set LOCAL=c:\usr\local

::=====================================================
4) test du type de système
:: gestion du système
IF NOT "%OS%"=="Windows_NT" goto usage

5) options usage et doc
:: gestion des arguments
if "%1"=="/?" goto usage
if "%1"=="/doc" goto doc

6) comptage du nombre d'arguments
set argc=0
for %%x in (%*) do Set /A argc+=1

rem call :getargc argc %*

7) procédure en fonction du nombre d'argument
if "%argc%" == "0" goto pas_d_argument
if "%argc%" == "1" goto 1_argument
if "%argc%" == "2" goto 2_arguments
if "%argc%" == "3" goto 3_arguments
if "%argc%" == "4" goto 4_arguments
echo. %argc%
GOTO :EOF
::----------------------------------------------------
:pas_d_argument
echo.pas_d_argument
GOTO :EOF
::----------------------------------------------------
:1_argument
echo.1_argument
GOTO :EOF
::----------------------------------------------------
:2_arguments
echo.2_arguments
GOTO:EOF

::----------------------------------------------------
:3_arguments
echo.3_arguments
GOTO:EOF

::----------------------------------------------------
:4_arguments
echo.4_arguments
GOTO:EOF

8) programme principal
::=====================================================
:: traitement principal
:main

GOTO:EOF

9) fonction getarc pour compter les arguments (optionnelle)
::=====================================================
::# getargc - compte le nombre d'arguments
::# 
::# appel : call :getargc argc %*
:getargc
    set getargc_v0=%1
    set /a "%getargc_v0% = 0"
:getargc_l0
    if not x%2x==xx (
        shift
        set /a "%getargc_v0% = %getargc_v0% + 1"
        goto :getargc_l0
    )
    set getargc_v0=
    goto :eof
::----------------------------------------------------

10) afficher l'usage avec sed
::----------------------------------------------------
:usage
  type %~nx0  | findstr /B "::~" |sed "s/... //"
GOTO:EOF
11) afficher la doc avec une autre entete de commentaire
:----------------------------------------------------
:doc
  type %~nx0  | findstr /B "::# " |sed "s/... //"
GOTO:EOF

Quelques remarques:

  • point 1: Ne pas oublier si on ne veut pas afficher les commandes exécutées.

  • point 2 et 10:L'usage se trouve dans l'entête en tant que commentaire. C'est pou cela que les lignes commence par la séquence ::~. :: indique une ligne de commentaire.

    Un tilde permet de distinguer les lignes réserver à l'usage.

    Pour afficher on utilise la commande

    type %~nx0  | findstr /B "::~" |sed "s/... //"
    

    La fonction sed n'est pas native mais on peut facilement trouver une exécutable gnu pour windows.

  • point 4: Le format utilise la notation dos avec le slash (/), mais vous pouvez utiliser une écritue linux-- ou unix -).

  • point 6 et 9: La plus simple façon de compter les arguments est

    set argc=0
    for %%x in (%*) do Set /A argc+=1
    

    On retrouve les arguments ensuite avec les variables %1,%2,%3,...

    Je n'ai pas résisté à introduire une fonction pour compter les arguments. Vous pouvez utiliser l'un ou l'autre.

  • point 7:On appelle une routine en fonction du nombre d'argument.

    Les variables globales %1,%2,%3,... sont utilisées. Un passage par argument aurait été possible.

téléchargement

description version date téléchargement
script de template 1.0 19/08/2016 template.bat

?>