Le web de Dominique Guebey – Bazar informatique

Page : http://www.dg77.net/tekno/manuel/bat.htm


   D o m i n i q u e   G u e b e y    J u n g l e      Bazar informatique

Les finesses du batch

Scripts batch sous Windows, un petit pense-bête.

Voir aussi la page Script FTP.

:: Création d’un fichier vide
:: ou remise à blanc d’un fichier existant.
:: "> nul" : pas de sortie informative.
type NUL>nom_chemin\nom_fichier.xxx > nul

:: Ne pas afficher les messages resultant de commandes en erreur
DEL toto.txt >nul 2>nul
:: (Si on se contente de ">nul" et si toto.txt n'existe pas,
:: on verra quand même s’afficher "Impossible de trouver etc.")

:: Extraction du nom et de l'extension d'un fichier :
:: Le paramère %1 contient chemin et nom d'un fichier,
set NOMFIC=%~n1%~x1
:: Différentes options :
%~1  ôte les apostrophes (") encadrant la variable.
%~f1 donne le nom complet "fully qualified path name".
%~d1 donne l’unité (drive) seule.
%~p1 donne le chemin seul.
%~n1 donne le nom seul.
%~x1 donne l’extension (.html, .txt, .pdf…).
%~a1 donne les attributs du fichier.
%~t1 donne l’horodatage du fichier.
%~z1 donne la taille du fichier.
%~s1 donne le nom court du fichier. Exemple :
     pour C:/wwwrk/marchenordique/entrainement.htm
     on obtient C:\wwwrk\MARCHE~1\ENTRAI~1.HTM


:: Changer un caractère par un autre.
:: Exemple : dans la donnee %TRAV%,
:: transforme la barre oblique inversée ("antislash" ou backslash)
:: en barre oblique normale (slash) :
set TRAV=%TRAV:\=^/%

:: Verification reseau
:: %SRVFTP% ou toute autre valeur : adresse I.P. de la cible.
ping -n 1 -w 2000 "%SRVFTP%">nul
IF %errorlevel% == 0 GOTO sping
ECHO *** Probleme reseau ou serveur ftp **
PAUSE
GOTO :EOF
:sping
:: Remarque : "-w 2000" est imperatif sinon erreur pas monitoree


:: Verification d'une liste de codes d'erreur FTP

:: "EnableDelayedExpansion" a cause du "for"
setlocal EnableDelayedExpansion
set listerr=501 530 550 553
:: La commande for (option /F) récupère la première chaîne
::  de chaque ligne du log ftp
:: La seconde commande for imbriquée dans la première va boucler sur
::  les codes dans la variable listerr (option /I) pour comparaison
::  avec le log.
:: L'option tokens est facultative (defaut = 1)
:: Noms de variables : un seul caractère
:: C : 1ere chaine de la ligne lue
:: R : lectures successives dans liste des codes
FOR /F "tokens=1" %%C in (%LOG%) DO (
 FOR %%R in (%listerr%) DO (
 IF /I "%%C"=="%%R" (call ftperr.bat %%C & GOTO :EOF)
 )
)

:: FTPERR.bat appelé par ce qui précède
IF %1==501 goto err501
IF %1==530 goto err530
IF %1==550 goto err550
IF %1==553 goto err553
set message=*** Non repertorie
GOTO finerr
:err501
set message=*** Erreur de syntaxe
GOTO finerr
:err530
set message=*** Echec de l'authentification (code utilisateur et/ou mot de passe)
GOTO finerr
:err550
set message=*** Repertoire inconnu
GOTO finerr
:err553
set message=*** Nom de fichier incorrect ***
GOTO finerr
:finerr
ECHO *** Code ftp : %1%
ECHO *** %message% 
PAUSE


:: Récupère donnée d'un fichier "dernier.txt"
:: %ENTREE% : valeur lue. Remarque : on ne lit que la première ligne.
:: S’il n’existe pas, on crée le fichier, son contenu initialisé à 1.
if not exist %TMP%dernier.txt echo 1 > %TMP%dernier.txt
set /p ENTREE=<%TMP%dernier.txt
:: Suite : calcul avec le no de jour du mois
:: pour faire des calculs (option a) le nombre ne doit pas commencer par un zero
:: (cf http://www.robvanderwoude.com/battech_leadingzero.php)
set jour_n=%date:~0,2%
IF "%jour_n:~0,1%"=="0" SET jour_n=%jour_n:~1%
:: calcul
set /a NUMERO=%ENTREE%+%jour_n%