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%