Académique Documents
Professionnel Documents
Culture Documents
Introduction
Objectifs
Cette note de synthèse a pour but, de présenter et d'initier à la programmation batch, tout
en se penchant sur l'étude d'un script réalisé en entreprise.
Ce langage connu de nom, que j'ai pu apprendre et palper durant mon stage, a su me plaire
tant par sa simplicité et que par sa robustesse.
Ce fut pour moi, comme un bond dans le passé, du temps de l'informatique à ses débuts. C'est
cela, qui m'a poussé à en faire le sujet de ma note de synthèse, plutôt que de choisir mon
autre projet de stage de réalisation de pages web dynamiques.
Coup de coeur envers les nombreuses facéties de cet ancien langage.
Dans chaque entreprise, la sauvegarde des données est essentielle voire capitale pour sa
survie.
Ainsi, la sauvegarde est un problème, mais surtout un problème de poids qu'il nous faut
traiter.
Durant mon stage, je fus confronter à ce problème et mon objet de stage fut de pouvoir
élaborer un script permettant de sauvegarder les données d'un utilisateur, tout en compressant
ces dernières, afin d'en réduire l'espace utilisé sur le disque de stockage.
User du batch pour la réalisation, c'est faite suite à une discussion avec ancien élève,
aujourd'hui professeur, qui me dit « Pourquoi pas utiliser le batch ? ».
Exemple de commandes:
Sous Sous
Commandes Propriété
Windows 98 Windows_NT
Affiche et Modifie le répertoire
Cd X X
courant.
Liste les fichiers et répertoires et
Dir X X
sous-répertoires.
Del X X Supprime les fichiers.
Copy X X Copie des fichiers.
Cls X X Nettoie l'écran.
Modifie les couleurs de la
Color X
console.
Format X X Formate un lecteur disque.
Affiche des informations sur les
Help X
commandes.
Affiche le chemin d'accès des
Path X X
fichiers exécutables.
Copie des fichiers et des
Xcopy X X
répertoires.
**Windows_NT se trouve Windows 2000,XP,NT
Pour Windows 95/98, l'aide du dos se trouve dans le répertoire oldmsdos du dossier other.
Pour exécuter une commande, il suffit de taper la commande à partir du terminal, puis
d'appuyer sur "ENTRÉE".
Accéder à MS-DOS ou à l’émulateur DOS :
Le terme vient du temps oú on programmait les ordinateurs avec des cartes perforées,
qu'on donnait à l´administrateur par paquets en espérant que tout fonctionne bien.
C'est un fichier ASCII (texte non mis en forme) contenant une ou plusieurs commandes du
système d'exploitation. Le nom de fichier d'un programme de commandes possède une
extension .cmd ou .bat pour Windows ou .sh pour linux. Lorsque vous tapez le nom de fichier
á l'invite de commandes ou lorsqu'un programme de commandes est exécuté á partir d'un autre
programme, ces commandes sont traitées de manière séquentielle. Les programmes de
commandes sont également appelés fichiers de commandes.
L'intérêt des batch est donc d'automatiser des tâches répétitives effectuées sous DOS.
Un fichier Batch n'est rien de plus qu'un fichier texte contenant des commandes MS-DOS ;
ainsi une connaissance DOS est requise pour effectuer une programmation batch. Pour que
ces instructions soient compréhensibles, il nous faut user d’un vocabulaire adéquate et
ordonné.
Quelques commandes:
ECHO: C'est une commande de sortie comme printf en langage C, mais aussi de
désactivation.
En effet, lors de l'exécution d'un batch toutes les commandes sont affichées. Afin de pallier à
l'affichage de celles-ci, on rajoute un off. Ce qui donne: echo off . Grâce à cela, les
commandes ne sont désormais plus visibles. Cependant, la commande echo off elle, l'est
toujours. ...:oO ...
Ainsi, l'astuce pour pouvoir la rendre invisible est de lui rajouter un @ qui va masquer la
commande qui le suit.
@ echo off
PAUSE: Comme son nom l'indique, permet de " break " son programme, ce qui peut
nous être utile afin de visualiser le résultat de notre travail ou intéressant pour un débuggage
ligne par ligne.
GOTO: Cet outil va permettre d'effectuer des sauts inconditionnels. Ainsi, possibilité de
faire des boucles ou encore sauter de parties de programme qui ne nous intéressent pas.
ELSE: Nouveauté présente que sur les OS_NT, elle représente un véritable bond en ce
qui concerne la programmation batch.
Nous permet ainsi, d'effectuer une action si la condition du IF n'est pas satisfaite.
rem Exemple:
@ echo off
rem Désactive l'affichage des commandes pour tout le script.
if exist e:dir
rem si le lecteur e: existe, alors je liste l'ensemble de ses fichiers, répertoires, sous-
répertoires.
else exit
rem Sinon je ferme la console.
rem Exemple:
@ echo off
rem Désactive l'affichage des commandes pour tout le script.
echo n|format e: /Q
rem la sortie de echo "n" est redirigé à l'entrée de la commande format, ici on procèdera à
une annulation de formatage automatique.
Pour une meilleure compréhension de ces outils je vous invite à visualiser le petit exemple
situé dans la troisième partie de cet article.
2.1. Étude
Bien qu’étant les fruits d’une même entreprise, victime du temps, les systèmes Windows
95, 98 n’ont pas les possibilités des systèmes Windows_NT (Windows NT, Windows 2000,
Windows XP). Cela se remarque dès l’installation. Les OS_NT vous demandent de choisir
entre un système de fichiers connu sous 98, le FAT 32 et un autre, le NT FS.
De ce fait, l’arrivée des systèmes NT a permis l’apparition d’un système de fichiers (ntfs)
étant á la fois plus sécuritaire et meilleur gestionnaire de l’espace disque que son prédécesseur.
Aussi, afin d’effectuer notre script, nous devons déjà prendre en compte tous ces paramètres.
La démarche pour une sauvegarde compressée de données ne sera pas la même qu’il s’agisse
d’environnement NT ou 98. Il faudra songer á assurer une certaine compatibilité.
Sur les systèmes NT, la réalisation du script en fichier batch s’avérera plus simple.
En effet, sur ses Operating System, un outil de compression est déjá disponible.
Il suffira d’insérer dans notre code la commande compact afin d’effectuer une compression.
Les utilisateurs de Windows 98, eux, ne disposent pas de cet outil. Une aide d’un logiciel
tierce de compression serait envisageable. Ainsi, il nous faut rechercher un logiciel efficace,
exécutable sous dos au moyen d’une simple commande, de licence pas très onéreuse; les plus
connus WinRar et PKZIP.
EXEMPLE:
L’étude d’un exemple concret, nous permettra de rendre plus imagé cette démarche.
Notre parc informatique possède un serveur NT 4.0 sur lequel se trouve un disque de
sauvegarde et des machines clientes fonctionnant sous Windows 2000 pro et XP pro. Pour
accéder au disque de sauvegarde, nous userons de U:, et pour une machine cliente disons C:.
Imaginons maintenant que l’heure de notre serveur possède, admettons 20 minutes de retard,
sur l’heure d’une des machines clientes. Supposons que les utilisateurs aient un droit de
modification sur leurs fichiers directement sur le disque (U:) de sauvegarde. Nous sommes
alors en face d’une situation « dangereuse ». Ainsi, ces heureux utilisateurs ou groupes
utilisateurs de cette machine risquent d'avoir quelques mauvaises surprises au niveau de la
sauvegarde (pleures et grincements de dents sont au rdv :o( ).
Disons que l’utilisateur avec pouvoir sauvegarde ses documents, contenus dans son C:, sur le
U:. Cependant, comme par hasard, en accédant au U: pour vérifier son travail, il s’aperçoit
d’une erreur. Il la rectifie alors, depuis le U:, puis retourne de suite à son poste. S’il utilise le
script à cet instant … Pouf !!! … boulette :oO !!
Schéma récapitulatif:
2: 2ème sauvegarde.
(15h00 - 20min de retard) = 14h40 < 14h50
L'heure de dernière modification connue étant plus récente sur le client que celle du
serveur, la modification effectuée sur le serveur n'est pas prise en compte.
Il y a donc remplacement et perte de données !!
Afin de pallier à ce problème, il faudrait peut être songer, pour les utilisateurs ayant un
compte de domaine, à basculer sur un profil itinérant, plutôt que local. Ce qui permettrait aux
machines clientes et au serveur d’avoir le même horaire, et d’interdire le réglage de l’heure à
l’utilisateur, par Access Control List (ACL : contiennent les permissions associés aux objets «
Serveur Windows 2000 »).
Exemple:
J’aimerais initialiser une variable avec le nom Kathy, … :oO, ce n’est pas trop compliqué:
set nom = Kathy
rem Nom possède la valeur Kathy.
Pour utiliser notre variable dans le script, on lui rajoutera désormais des %.
Ainsi, pour afficher la valeur de la variable à l’écran, nous mettrons dans notre batch :
Voilà :o) .
Cependant, le plus intéressant quand nous devons faire des scripts, c’est bien les variables
d’environnement. Pour en avoir fait l’expérience, je vous assure qu’elles facilitent nettement
le travail du programmeur. Il existe deux types de variables d'environnement, système et
locales, qui définissent le comportement de l'environnement de l'interpréteur de commandes
ou l'environnement complet du système d'exploitation. Les variables d'environnement
système sont prédéfinies dans le système d'exploitation. Les variables d’environnement
peuvent être visualisées au moyen de la commande SET, à l’invite de commande.
C:>SET
Elles sont intéressantes, certes car elles vous permettent de ne pas écrire des chemins
d’accès à des fichiers d’une longueur à vous faire pâlir, ou d’accéder au Path pour permettre
de lancer des compilations java (par exemple). Néanmoins, lors de la réalisation de votre
script en entreprise, il s’avérera qu’il soit compatible avec les operating system de celle-ci.
L’évolution vers des systèmes NT, a fait du coup évoluer le nombre de variables
d’environnement disponibles. Ainsi, Windows XP ou 2000 possèdent le double des variables
disponibles chez 95/58. C'est-à-dire, la facilité dont vous faîtes preuve pour scripter sur les
OS_NT, vous fera grincer des dents en adaptant pour 95/98.
Présent
Variable Fonction
sur:
Renvoie l'emplacement auquel les applications stockent
Appdata Win 98,NT
les données par défaut.
Os Renvoie le nom du système d'exploitation. Win NT
Spécifie le chemin pour la recherche des fichiers
Path Win 98,NT
exécutables.
Tmp & Temp Renvoie les répertoires par défaut temporaires utilisés. Win 98,NT
Username Renvoie le nom de l'utilisateur qui a ouvert une session. Win NT
Renvoie l'emplacement du profil de l'utilisateur en
Userprofil Win NT
cours.
Contenant l'adresse du répertoire démarrage de
Winbootdir Win 98
Windows.
Renvoie l'emplacement du répertoire du système
Windir Win NT
d'exploitation.
3. Place à la pratique
3.1. Exemple
Afin de rendre plus attractif cet article, nous allons effectuer un script ayant à peu près le
même principe que celui réalisé en entreprise. Néanmoins, cet automate ne fonctionne que sur
les systèmes NT (FS : NTFS). Vous pourrez appeler ce script, soit à partir de votre terminal en
utilisant la commande CALL (permettant d'appeler des fichers batch) et lui rajouter des
paramètres (le nom de votre fichier ou dossier contenu dans « Mes Documents », la lettre du
lecteur sur lequel vous voulez le sauvegarder), soit en double cliquant sur votre batch ; celui-
ci sauvegardera tout en compressant votre dossier « Mes Documents » dans votre lecteur
principal C:.
Exemple d'utilisation:
Les paramètres se placent derrière la ligne de commande, appelant votre batch et sont séparés
par des espaces.
Astuces: pour mettre un paramètre contenant des espaces dans son nom, nous lui aposeront
des parenthèses.
rem il nous faut écrire de la façon suivante:
rem ligne de commande paramètre_1 paramètre_2 paramètre_3
call nom_du_batch "votre pseudo" "nom du fichier" lettre_du _lecteur:
Code:
Conclusion
Pour conclure, le batch est un langage de pogrammation très pratique et simple pour nous
permettre d'automatiser certaines tâches.
Cependant, la diversité des Operating System en entreprise, peut représenter un frein lors
du déploiement final.
Basiquement, un fichier batch n'est rien de plus qu'un fichier texte contenant des commandes
MS-DOS, et possédant le suffixe ".bat". Nous allons donc faire une bref récapitulatif de
quelques commandes avant de nous intéresser aux deux scripts qui vont permettre
l’installation centralisée de notre application.
Le fichier updatelocal.cmd local doit être présent sur chaque serveur susceptible d’être mis à
jour. Il permet de "mapper" le serveur d’installation et d’aller récupérer les logiciels à l’aide
d’une simple commande. "update nom_logiciel" vérifie si le fichier est installé ou non et
renvoie un message dans la fenêtre du type : "Administration Kit seems to be already
installed" ou "Macromedia Flash Player not installed", "update nom_logiciel on" permet de
lancer l’installation (après avoir vérifié que le package n’etait pas déjà présent sur la
machine). Il faudra bien entendu se placer dans le dossier ou vous avez placé le fichier avant
de lancer la commande sauf si le fichier est présent dans le "path" d’origine (par exemple :
C:\Winnt ou C:\Winnt\System32). Voici donc le updatelocal.cmd :
@ECHO OFF
Pour que le service Norton puisse se stopper, il est indispensable que le nom du service
corresponde au nom renseigné dans le script. Si le service s’appelle "NAV Corporate Edition",
celui-ci ne pourra pas être arrêté et il se peut que la mise a jour rencontre des problèmes. De
plus, la version ci-dessus est très simplifiée et on peut par exemple rajouter des tests comme
un ping du serveur d’installation. Si la machine ne répond plus, ce processus permettrait de
basculer sur une machine de secours.
@ECHO OFF
TITLE NT Setup
FOR %%i IN (%UPDATE_SOFTWARE%) DO IF /i "%1" == "%%i" GOTO install
GOTO help
:help
CLS
TITLE NT Setup
ECHO Usage: update [option [suboption...]]
ECHO where [option] is one of the following "system" (1/1):
ECHO reskit [on] : Resource Kit Utilities
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
ECHO.
PAUSE