tutoriel batch

Upload: anthony-breton

Post on 15-Jul-2015

122 views

Category:

Documents


0 download

TRANSCRIPT

Formation Batchwww.astase.com Page 1/90 Formation la programmation Batch Par Adrien REBOISSON http://www.astase.com Quatrime dition Attention : ce tutoriel a ete a l`origine ecrit pour les personnes possedant Windows 95, Windows 98, ou Windows Me. L`integration sous Windows NT etant diIIerente (le terme Windows NT regroupant Windows NT, Windows 2000, ou Windows XP), nous vous conseillons si vous possedez Windows NT de lire ce tutoriel sans oublier l`annexe II qui detaille les diIIerences majeures entre l`integration Batch sous les distributions standard et les distributions NT de Windows.

Formation Batchwww.astase.com Page 2/90 Table des matires I] Introduction3 II] Les bases de la programmation Batch10 III] Variables et paramtres17 IV] Sauts, boucles 31 V] Excution conditionnelle34 VI] BouclesFOR38 VII] Redirections42 VIII] Appel d'autres fichiers Batch48 IX] Travail avec ERRORLEVEL49 X] Tches dadministration courantes51 Dtails sur certaines fonctionnalits de PowerBatch XI] La compilation 58 XII] Les bordures60 XIII] 5 autres fonctions de PowerBatch63 XIII] Programmation avance66 ANNEXE I] Lintgration MS-DOS sous Windows69 ANNEXE II] Batch sous Windows NT76 ANNEXE III] Mots cls ou notions connatre abords dans ce tutoriel86 Cetutorieln'apaspourvocationderemplacerunlivreddila programmationBatch,maissurtoutd'initierleprogrammeurnoviceou ladministrateurpeuhabitucestechniques.Mercidenepashsiterme signaler toute incohrence, erreur, ou suggestion propos de ce document via http://www.astase.com/forums.Jecherchegalementtoutepersonnedisponible pour tendre ce document ou dvelopper certaines parties, etc Formation Batchwww.astase.com Page 3/90 1) Introduction Basiquement,unfichierBatchn'estriendeplusqu'unfichiertextecontenantdes commandes MS-DOS, et possdant le suffixe ".bat". SivousneconnaissezpasMS-DOSoun'avezjamaisentenduparlerde Autoexec.bat, passez votre chemin : en effet, la programmation Batch ncessite une connaissance minimum de l'environnement DOS. Enfait,unfichierBatchcontientsimplementunesuitedecommandesquevous pourrieztapersousl'invit(prompt)duDOS,chaquenouvellelignedufichier correspondantunenouvellecommande.Nanmoins,certainescommandesne sont qu'utilisables dans les fichiers batch du fait de leur inutilit dans l'environnement de commande DOS. Leurutilitest,parexemple,quandilfautrptertoujourslammesriede commandes. titre d'exemple, nous pourrions voquer le changement de rpertoire et peut-tre aussi la commande FORMAT qu'on fait souvent suivre de la commande CHKDSK pour vrifier si la disquette a bien t formate. Exemple : Imaginons un fichier batch contenant les commandes suivantes : cd \ cd C:\TOOLS qmail -z:"default.txt" Cela aurait le mme effet que si vous tapiez sous DOS les commandes suivantes : C:\Chemin> cd \[Entre] C:\> C:\TOOLS[Entre] C:\TOOLS> qmail -z:"default.txt"[Entre] L'intrtdesbatchestdoncd'automatiserdestchesrptitiveseffectuessous DOS. Lesfichiersbatchsontdonctrsfaciles crer puisqu'unsimplediteurtextesuffit (Comme EDIT, sous DOS) LesfichiersbatchpeuventgalementutilisertouteslescommandesDOS,cequi rend disponible pour le programmeur un grand nombre de fonctions. Enfin,leurtailleestrelativementlgreparrapportd'autresprogrammes,cequi facilite leur transfert sur diffrents disques et supports de stockage.

Formation Batchwww.astase.com Page 4/90 Cependant -Le langage Batch n'est pas compil, il est interprt par COMMAND.COM ce qui rend plus lent l'excution de programmes batch par rapport des applications crites directement en langage machine, -Les fichiers Batch sont directement ditables, donc votre code n'est pas "protg" la copie par d'autres programmeurs, -Enfin, et surtout, des oprations lmentaires comme le traitement de chanes de caractres, d'oprations mathmatiques, etc n'existent pas sous DOS, ce qui implique l'usage de programmes externes (s'ils ont t crs, selon les cas). 2) Cration de votre premier Batch Un fichier Batch tant la base un fichier texte, vous pouvez crer vos batchs avec nimporte quel diteur de texte. Attention :unfichierbatchestunfichiertexte brut (*.txt)sansformatage particulier(gras,italique,soulign).Personnellement,jetrouveinutiledutiliserun programme aussi lourd que Microsoft Word pour crire un minuscule bout de fichier ASCII !PrfrezlebonvieuxNotepad(bloc-noteWindows)oulesimplistemais nanmoins utile EDIT sous DOS, si vous tes puriste Sivousdbutezousivoussouhaitezgagnerdutemps,jenepeuxquevous conseiller dutiliser PowerBatch, un programme que jai moi-mme crit et qui facilite letestetledboguagedevosbatchs.Cetutorielestplusaxsurlcrituredevos Batchs avec PowerBatch, mais le langage tant le mme que vous utilisiez Notepad ou PowerBatch, ce tutorielpourra tout de mme vousaiderdans le caso vousne souhaiteriez pas utiliser mon application. PowerBatch est disponible sur http://www.astase.com. PrenonslecassimplisteouvoussouhaitezlisterlesfichiersDLLdurpertoirede Windows (C:\WINDOWS). Vous entreriez sous DOS : C:\Chemin> cd \[Entre] C:\> cd WINDOWS [Entre] C:\WINDOWS> DIR *.DLL [Entre] Ilvoussuffitdetaperdansunfichiertextelescommandesprcdentes,commesi vous les entriez sous le prompt MS-DOS : Formation Batchwww.astase.com Page 5/90 Facile, non ? La rdaction de votre Batch est termine. notre stade, nous avons cr un fichier texte il faut maintenant le transformer en Batch.Laussi,pastropdedifficults :ilsuffitdechangersonextensionen.bat sous Windows. Dans notre exemple, test.txt devient donc test.bat. Maintenant, il ne vous reste plus qu tester votre Batch ! UnfichierBatchsexcutesousMS-DOS.Si voustessousMS-DOS,il voussuffit dappelerlefichierdanslalignecommande.Sivoustessous Windows,cestplus simple puisquil suffit de double-cliquer sur licne du Batch pour que celui-ci souvre dansuneconsoleMS-DOS(UneparfaitesimulationduDOSparWindows),etne sexcute aussitt : Que sest-il pass ? Que vous soyez sous Windows ou sous MS-DOS, cest le mme processus :lefichierbatchesttransmislinterprteurCOMMAND.COM,qui analyse chaque ligne du batch et excute les commandes rencontres. Formation Batchwww.astase.com Page 6/90 Comme vous pouvez le constater, la diffrence avec dautres programmes Windows estdetaille :alorsquelesexcutables normaux sontdesfichiersbinaires constitusdemacro-instructionsdestinsdirectementauprocesseur,lesfichiers batchscontiennentlescommandesDOS tellesquelles ,cequiexpliquela ncessit dun interprteur pour traduire les commandes au processeur ; cest le rle de COMMAND.COM il ny a donc pas besoin de compiler le code. Silafentresefermeautomatiquementsansvouslaisserletempsde visualisersonrsultat,rajoutezlacommande PAUSE lafindevotre batch.Mmesivousnecomprenezpasencorecettecommande,sachezque celle-ci demande une validation clavier avant de terminer le programme, ce qui vous laissera le temps de visualiser le contenu de la fentre. Comme dit auparavant, les Batchsont t conuset sexcutent sous MS-DOS.Le terme MS-DOS rappelle pour certains la prhistoire de linformatique moderne et peut conduire un dsintrt total en pensant que le DOS est un systme obsolte et dsormais enterr , qui ne mrite de nos jours plus grand intrt. Dun ct cest vrai : depuis lavnement des OS graphiques comme Windows,MS-DOSestenphasededclinetestdeplusenplusabandonn,tantparles dveloppeursquelesutilisateurs.Certainsutilisateursdesderniresversionsde Windows ignorent mme jusqu lexistence du DOS ! Etpourtant,sileDOSpartentirenapasgrandintrt,lacohabitationMS-DOS/Windows est toujoursdenosjoursintressante. Cherchezunlangagesimple pour automatiser vos oprations sous Windows : le systme Batch est l ! MmesousWindows,etcegrceauDOS,vouspourrezautomatiserlaplupartde vosoprations.Aprslalecturedecetutoriel,vouspourrezmmejelespre, dvelopper de petits programmes complets et complexes. Pour aborder un tout autre point certains peuvent se poser la question : Les fichiers batchspeuventtredangereux pourmonsystme?Apriori,lesfichiersBatchne sont pas plus dangereux que nimporte quelle application DOS ou Windows. En plus, il suffit dditer le fichier pour visualiser son code et se rendre directement compte de ladangerositpotentielledecertainescommandes.Ilconvienttoutefoisderester prudentaveclesfichiersbatchsdeprovenancenonsr(enpicejointetransmise pare-mailparexemple).Etantdonnquuneseulecommandepeutdtruirevotre systme (ou lendommager fortement le cas chant), je vous conseille dditer tout fichierBatchnon sr avantlexcutionafindevousrendrecompteparvous-mme de la dangerosit de ceux-ci. Formation Batchwww.astase.com Page 7/90 3) Utilisation de PowerBatch Ralisons le Batch crit plus haut dans le bloc note avec lapplication PowerBatch. DmarrezPowerBatchendouble-cliquantsursonicneouvialesraccourcis implants dans le menu Dmarrer. PowerBatchprsentedenombreuxavantagespourlaralisationdefichiersBatchs dont : Affichage des diffrentes lignes dans le Batch, Test rapide des fichiers envois simplifis des paramtres, SupportduformatBatchnatif(distinctiondescommandes,enregistrement direct en *.bat), Insertion automatise des commandes les plus frquentes, Nombreux assistants de cration de commandes, Dbogueur intgr, etc Au lancement, PowerBatch affiche une fentre similaire (lgrement diffrente selon les versions) : Formation Batchwww.astase.com Page 8/90 Danslazonedetexte,entrezlescommandesprcdemmentstockesdansle fichier texte cr avec Notepad : CD \ CD WINDOWS DIR *.DLL SauvegardezvotreBatchvialemenuFichier.PourtestervotreBatch,ilvoussuffit daller dans le menu Programme , Tests , Du fichier courant , ou bien de presser simplement la touche F9. Le programme est test, puis PowerBatch vous redonne la main. Pour tester vos commandes, utilisez le sous menu Console MS-DOS du menu Programme .CelaaffichelaconsoleDOSafinquevouspuisseztestervos commandes avant de les introduire dans vos batchs. PowerBatchproposeunsupportgraphiqueaucompilateurBat2Exec.Pourquoi compilervosbatchs,puisqueCOMMAND.COMestlpourlesinterprter ?Pour protgervotrecode,accrotrelavitessedexcution,utiliserleformatbinairemoins altrable que le format ASCII Le compilateur Bat2exec transforme donc vos batchs en programme binaires dextension *.COM . Pour plus dinformations, consultez le chapitre Compilation de vos Batchs dans ce manuel. PowerBatch comporte des assistants, placs dans le menu Assistants , dont : Le crateur de copies qui vous permet de crer le code correct pour une utilisation de XCOPY ou XCOPY32, Lecrateurdeborduresvouspermetdecrervosencadrements dans vos batchs. LAssistantdentreclavierpermetdecrerdesdemandesau clavier, ou de crer facilement des menus. LAssistantconversionennomscourtsquipermetdetransformer desnomsdecheminWindowsennomsauformatcourt(formatMS-DOS). LesConvertisseursAnsi>OEM/OEM->Ansiquipermettentde convertir les jeux de caractres DOS vers Windows et rciproquement. Vous pouvez galement utiliser lassistant de recherche des erreurs (dans le mme menu). Celui-ci dtectera les sauts incorrects dans votre Batch et les labels inutiliss (ceux-ci seront abords plus loin dans le batch). LemenuFichier>Nouveau>Autrescontientdenombreuxexemplesdefichiers Batch que vous pouvez rutiliser. Formation Batchwww.astase.com Page 9/90 Lemenu Commandes regroupedescommandesDOSouBatchfrquenteset vous permet ainsi de les insrer dans vos Batchs en conservant leur syntaxe propre. Le menu Fichier contient des formats dexportation particuliers pour vos batchs, permettantdeconserverlamiseenformedeceux-cidansdautresapplicationsou dansdautressystmesdexploitation.Unesectiondecetutorielestconsacre cette fonction. Un inspecteur de variables denvironnement pour visualiser les variables dclares sur votre systme. LutilisationdePowerBatchestdtailledanslefichierdaideaccessibledans PowerBatchenpressantF1.Cetutorielvamaintenantseconcentrersurla programmation Batch en tant que tel, et suppose que vous savez maintenant Crer, Ouvrir,Sauvegarder,etTestervosbatchsavecPowerBatch.Vouspouvez maintenant crer vos fichiers avec PowerBatch ou Notepad mais dans ce dernier casvouspourrezpassercertainschapitrestraitantdecertainesfonctionnalitsde PowerBatch. Formation Batchwww.astase.com Page 10/90 2) Les bases de la programmation Batch UnfichierBatchnestpasconstituuniquementdecommandesDOS.Ilexiste,et cestlintrtdecelles-ci,descommandes*spcifiquesauxfichiersbatch.Voiciles plus simples et les plus courantes.

Lcho Le terme Echo a plusieurs significations. Selon quil est utilis, on peut parler de commandedesortie,propritdaffichageoucommandededsactivationou dactivation.Cestunenotionsimplemaistrssouventutilisedansla programmation Batch. LorsquevouscrezunfichierBatch,vousentrezdescommandesMS-DOSla suite.Lorsquevousexcutezlebatch,ilapparatlcransousuneformeunpeu spciale :ilestaffichdabordlacommandecommesivouslavieztapevous mmesousDOS,puissonrsultat.Parexemple,sivousentrezunbatchsimpliste contenantluniquecommande DIRc:\*.BAT,etquevouslexcutez,il apparat lcran un rsultat du type: En haut de lcran apparat la commande, comme si vous laviezvous mme tape (DIR c:\*.BAT), puis son rsultat en bas (le catalogage des fichiers Batch la racine dudisqueC:\-celui-citantlemien,vousnaurezpaslemmersultatquecette capture dcran !) Maintenantimaginezquevoussouhaitezsimplementafficherlersultatdela commande.Ilvadoncfalloirtrouverunmoyendemasquerlaligneaffichantla commande avant son excution. Pourarrivercela,vouspouvezutiliserlacommandeechooffquidsactive lcho.Cesteneffetpar echo quelafonctiondaffichageavantexcutionest appele. Formation Batchwww.astase.com Page 11/90 Si vous rcrivez votre batch en lui ajoutant son dbut echo off , cela donne : Echo off Dir c:\*.bat Et si vous lexcutez, vous aurez un rsultat du style : Seul le rsultat de la commande dir C:\*.BAT a t affich a lcran. DansvotreBatch,lchoestdsactivlorsqueCOMMAND.COMrencontreecho off. Ce dernier nest pas ractiv tant que la commande inverse : echo on, nest pas rencontre. Pourquoi,puisquelchoestdsactivvialacommande echooff ,cette dernire est-elle justement affiche en haut de lcran ? Et bien tout simplement car MS-DOS affiche dabord, et excute ensuite. Rencontrant echo off , il laffiche, puis dsactiveaprs lcho. Nous verronsultrieurement comment contourner cette fonction. Unautremoyenpourdsactiverlchoestdefaireprcderlalignedontseulle rsultat doit tre affich du signe @ . Ainsi, vous pourriez transformer le batch Echo off Dir c:\*.BAT en @dir *.BAT Formation Batchwww.astase.com Page 12/90 Biensr,sinotrebatchcomportaitplusieurslignes,ilfaudraitrajouterautantde @ devantchaquelignequilauraitdelignesoulonveutdsactiverlcho. Autant,danscecas-l,utiliseruneseulefoisendbutdeBatchlacommande echo off . Cettenotiondcholocaldoittresaisie,carlamajoritdesprogrammeurs Batchsprfrentledsactiverparconomiedeplaceetsoucide comprhension(celavitequebeaucouptropdelignesincomprhensibles pourlenophytesoientaffiches lcran) :vousrencontrerez doncsouvent les commandes prcdemment cites. Undernierpointsurlcho :lacommande @echooff .Ilsagitd une combinaisondusigne @ etde echooff .Quelestsonintrt ?Etbiencela vitedafficher echooff endbutdebatchcommeilapparatdansladernire capture dcran. La dsactivation de lcho est elle mme masque via @ . Vous rencontrerez donc trs souvent cette combinaison. Vous pouvez ractiver lcho tout moment dans le Batch en insrant la commande inverse echo on . Commenter son code Commedanstoutlangagedeprogrammation,ilestessentieldecommenterson code : Celaaccrotlaclartducodeetlerendcomprhensibleparnimportequel collaborateur, Cela vous permet vous-mme de vous reprer dans votre code si celui-ci est eu peu complexe, Celafacilitevotrerelecturesiparexemplevousnavezpastravaillsurun code depuis longtemps. Pourintroduireuncommentaire,utilisezlinstructionREM,puisentrezunelignede texte, par exemple : REM Catalogage de C:\TEXTES DIR C:\TEXTES LaligneprcdedeREMneserapasexcute,maistoutdemmeaffiche lcran si lcho est activ. Dans tous les cas, la prsence de commentaires ne gne enaucuncaslexcutiondevotrecode ;celaalourditnanmoinslgrementvotre fichier. Formation Batchwww.astase.com Page 13/90 Afficher du texte lcran Ilpeuttreutile,danscertainscas,dafficheruntextelcran,parexemplepour informer lutilisateur de ce que fait le Batch. Vous utiliserez la commande echo . Encore elle ! Ici,sonusage estdiffrent.Sicetteinstruction nestpassuivie de off oude on , elle permet dafficher un texte lcran.Enralit,ECHOestutilispourfairesortirtoustypesdedonnes :pardfautle texteestenvoylcran,maisvouspouvezlenvoyersurlimprimante,dansun fichieretcPour linstant,considronssimplementqueECHOpermetdafficherun texte. Sivoussouhaitezparexempleafficher Bonjour lcran,riendeplussimple puisquil vous suffit dentrer : Echo Bonjour Remarquezl'absencedeguillemets,parrapportd'autresdelangagesde programmationexigeantquelesvariableslittralessoientdistinguesparces derniers. Silcholocalestactiv,letexteseraaffichdeuxfois :unefoisprcddela commandedaffichage echo ,lorsqueMS-DOSafficheralaligne,unefoissans echo ,lorsqueMS-DOSexcuteralaligne.Unebonneraisondedsactiver lcho local par un simple @echo off en dbut de batch ! Voiciunpetitbatchquimlecommentaires,messageslcranetcommandes DOS : @echo off REM Dsactive lcho local CD C:\WINDOWS REM Va dans le rep. De Windows Echo Les fichiers WFM vont tre effaces ! DEL *.WFM Echo Termin ! Afficher des lignes vides : attention, vous ne pourrez pas afficher des lignes vides en entrant juste echo . En effet, dans ce cas, vous dcouvrirez un 3 aspect de echo :silnestsuividerien,MS-DOSafficheltatdeECHO :ONsilestactiv, OFFsilestdsactiv.Parconsquent,ilexisteune combine pourafficherune ligne vide : il faut entrer echo. Formation Batchwww.astase.com Page 14/90 Exemple : @echo off echo Tentative infructueuse pour afficher une ligne vide REM MS-DOS va afficher ltat de ECHO car on a oubli le . aprs echo : Echo EchoAffiche maintenant une ligne vide : Echo. Echo Termine. qui donne : Rsum : Vous avez dcouvert 3 aspects de ECHO : Pour afficher du texte, on utilise ECHO suivi du texte afficher, Pour activer oudsactiver lcho local,onutilise ECHO ON ou ECHO OFF Silonveutafficherltatdelcho(actif/nonactif),onutilise ECHO sans autre paramtre. Sous MS-DOS ou sous Windows, lcho est activ ou dsactiv uniquement pour le batchencoursdexcution.Cetteproprit locale estproprechaquebatch. Lcho tant par dfaut activ, si vous souhaitez le dsactiver pour tous vos batchs, il faudra entrer dans chacun deux echo off ou @echo off Les caractres spciaux Sil y a bien un point important sur lequel il faut tre vigilant, cest bien sur celui des caractres spciaux. Ceux-ci dsignent notamment tous les caractres accentus de notrelangueainsiquelessignes spciaux %,,|,car ilscorrespondentdes siglesbienprcisquipourraiententranerdemultipleserreurssilstaientinsrs sans raison particulire dans un batch Formation Batchwww.astase.com Page 15/90 Pourlecasdesaccents,ilsagitsimplementdunproblmedejeudecaractres : MS-DOS utilise le jeu OEM et Windows le jeu ANSI. Ainsi, pour afficher correctement unaccent,soitvousdevreztapervotreBatchdirectementsousDOS,soitdevrez passersousWindowsparunlogicielpouvanteffectueruneconversionOEMvers ANSI. Le plus simple est carrment de sen passer. Pourlescaractres > , < , | , % , & ,ilscorrespondentdes lmentsdulangagequinedoiventpastreutilisssansraison.Sivousavez absolumentbesoindelesutiliser,faiteslestoujoursprcderducaractre dchappement ^ ,quidemanderaCOMMAND.COMdenepaslesinterprter commecommandesmaisjustedelesafficher.Etantdonnerlalourdissement consquent de votre code d linsertion systmatiquede ce caractre, l aussi, le plus simple et de sen passer. Effacer lcran Poureffacerlcran (dumoinsletextedelaconsoleDOSsivoustravaillezsous Windows).IlexisteunecommandebienconnueparleshabitusduBasic :CLS, pour Clear The Screen effacer lcran. Imaginezunecommandeproduisantdesrsultatstextuelsimportants :pournepas noyer lutilisateursousunflotdecaractresquelconques,faitessuivre linstruction incrimine de CLS. Le texte sera immdiatement effac, le prompt DOS revenant au coin haut gauche de lcran. Si vous travaillez sous DOS, il peut tre utile de commencer tous vos batchs par CLS poureffacerlcransansdoutedjoccuppardenombreuseslignesde commandes. Sous Windows, si un batch se termine par CLS, Windows fermera automatiquement la fentre (par dfaut sous les versions NT et XP de ce systme). Cela est logique : pourquoicontinuerdafficherlcranunelignevide, nettoye parCLS,donc exempt dinformations pour lutilisateur ? Faites une pause ! ladiffrencedeCLS,instructionutilisepournettoyerlcrandesinformations devenuesinutiles,ilexisteunecommandepermettantdelaisserdesdonnes lcrantantquelutilisateurnepressepasunetouche.Lexcutionestainsi interrompue,laissantletempslutilisateurdevisualiserlersultatdune commande, un texte dinformation, un message davertissement, etc. Formation Batchwww.astase.com Page 16/90 Il suffit pour cela dentrer linstruction pause dans votre Batch. Lorsque linterprteur rencontre linstruction pause , il apparat lcran : Si vous souhaitez simplement attendre lappui dune touche sans afficher le message classique gnr par MS-DOS, il suffit dentrer : Pause>nul Lerlede >nul seraabordultrieurement.Comparez-lesimplementvotre stadeun trounoir supprimanttouslesmessagesnormalementmisparla commande sa gauche. Alors quun CLS en fin de fichier Batch force Windows fermer la console DOS, un pauseenfindeBatchfaittoutlecontraire :ilempchelafermeturedelafentre tantquunetouchenestpaspresse.Ilpeutdonctreutilede terminervosbatchs parcetteinstructionsivouspossdezdesOScommeWindowsXPquiferment automatiquement les batchs une fois excuts. Pour sortir dun Batch en pause (ou en excution), pressez la combinaison de touche CTRL+C (Break) Aveclecontenudecechapitre,vouspouvezrdigerdepetitsbatchsutilisantles notions suivantes : Contrle de lcho local par @echo off ou echo on , Effacement de lcran par CLS, Attente de lappui sur une touche avec pause, Textes divers en utilisant echo . tout cela, bien sr, abondamment comment par des REM ! NOTE: * : MS-DOS n'est pas sensible la diffrence entre les majuscules et les minuscules pour lescommandes,quevouscriviezechoouEcho, oubienencoreECHOou EcHo, le rsultat sera le mme. Formation Batchwww.astase.com Page 17/90 3) Variables et paramtres Commedanstouslangagedeprogrammation,ilexisteunmoyendestockerdes informationsdansunemplacementdelammoiredevotreordinateur.Acet emplacement est associ un nom que vousdfinissez, afin de manipuler facilement ces donnes. Gnralits Vous rencontrerez des variables sous plusieurs formes : Lorsdelalecture :cest--direlorsquevousexaminerezetutiliserezle contenu dune variable, Lorsdelcriture :cest--direlorsquevousmodifierezlecontenudune variable. Danstouslescas,lacasse,cest--direladiffrencemajuscules/minusculesnest pasdiscriminatoirepourleDOS :ilconsidreparexemplelavariableAbcetaBC comme identiques. Par compte, ilest sensible la cassedu contenu des variables. Cest--dire que lorsque vous aurez tester le contenu dune variable si vous cette variablesenommeparexempleNometcontientfrederic MS-DOSdtectera une diffrence si le test se porte sur FREDERIC puisque le premier est en minuscules et le second en majuscules. Variables denvironnement Une variabledenvironnement correspondaunomduseultypedevariableque lon peut utiliser pour stocker des donnes. Elle reprsente une valeur accessible n importe o et n'importe quand dans l'environnement DOS du processus qui la pose. On peut simplifier en classant les variables denvironnement en 2 catgories : -Lesvariablesdenvironnement persistantes quisontdfiniesdans Windows(viaAutoexec.batoulepanneaudeconfiguration)quisont accessibles tous les processus, -Lesvariablesdenvironnement locales quevousdfinissentdansvos Batchs :lavariableserauniquementaccessibleauprocessusquilaura dfinieainsiquses enfants ,c'est--direlesprocessusquilcrera ventuellement. A chaque fois quun nouveau processus est cre (par exemple quand votre batch en appelle un autre), celui-ci hrite des variables du processus crateur.Si vous souhaitez modifier les variables hrites du processus crateur, sachez que celles-cineserontpasrpercutscelui-ci :lesmodificationsserontuniquement locales votre processus. Formation Batchwww.astase.com Page 18/90 Pour afficher les variables denvironnement persistantes (c'est--dire, on le rappelle, cellesqui sontdfinies avec Windows et publiques touslesprocessus), tapez simplement dans linvite de commande la commande set ce qui donne par exemple : Nous voyons donc que 8 variables d'environnement sont dfinies sur cet ordinateur : TMP, TEMP, PROMPT, WINBOOTDIR, COMSPEC, PATH, WINDIR; et BLASTER. Surces8variables,7sontdfinisparetpourWINDOWS:TMP(Rpertoire temporaire),TEMP(RpertoireTemporaire),PROMPT(InviteduDOS), WINBOOTDIR(DossierdedmarragedeWindows),COMSPEC(Adressede l'interprteur de commandes), PATH et WINDIR (Dossier de Windows). Introduction a la cration de variables Nous allons crer des variables, auxquelles nous assignerons des valeurs.Alacrationdecelles-ci,ilfaudratoujoursspcifierunevaleurinitiale.Ainsi,la variable Dossier4 peuttreaffectlachanedecaractre : C:\WINDOWS\COMMAND\EDB\MAKECAB . Utilisez la commande SET, qui requiert la syntaxe suivante : Set NomDeVariable=Valeur LorsquelinterprteurrencontreSET,ilanalyseensuitelenomdelavariablesa droite, puis les donnes droite du signe gal. Il associe ensuite un espace de votre mmoire vive la variable cre, remplissant cette mmoire rserve par les donnes trouves.Pouridentifiercettevariable,il luiassocieenfinunnom,celuirencontr la droite de SET. Par exemple, vous souhaitez associer la variable SysVer le texte Windows 95 . Entrez dans la console DOS : Set SysVer=Windows 95 VouspouvezretaperSettoutseulpourvoirlalistedesvariablesetvrifierque celle-ci a bien t ajoute avec les autres. Encoreunefois,commevotrevariablenapastdfiniecommevariable persistante, la fermeture de la console celle-ci sera efface de la mmoire. Formation Batchwww.astase.com Page 19/90 Erreur despace denvironnement insuffisant IlarriveparfoisqueWindows9xnepuisseenregistrerlavariableetaffichele message espace denvironnement insuffisant . Olaf COPO, sur microsoft.public.fr.windows98, rpond cela : L'espaced'environnementestunenotionhriteduDOS,etilestprobablequevotresolutionrsidedanslebonvieuxCONFIG.SYSqui,n'endplaisecertains,estencoreimportantsousWindows,demmequ'AUTOEXEC.BAT.CetespacemmoirecomprendlesvariablesPATH,COMSPECetcellesdfiniesventuellementparSET.Salimitestandardest,siellen'apaschangaveclesversions7.xenvigueuravecW9x,de256octets,desquelsilfautdduirelesvariablesd'environnementdjdfiniessurvotremachine.Ce qui fait qu'on ne va pas trs loin... Pour masquer ce message et rsoudre les problmes il faut donc augmenter la taille de la mmoire d'environnement : - Ouvrez CONFIG.SYS avec Notepad (fichier gnralement plac dans "C:\config.sys")- Insrez la ligne , ou cherchez-l pour la modifier : SHELL=C:\COMMAND.COM C:\ /e:1024 /p Cette syntaxe suppose qu'une copie de COMMAND.COM se trouve dans la racine du disque C:\. Elle peut tre modifie selon vos besoins. /e: dfinis la taille de l'environnement (ici 1024 octets)/p excute AUTOEXEC.BAT Vous pouvez porter la taille de l'environnement 2048 si des problmes surviennent toujours. Normalement, ce problme ne devrait pas survenir sous Windows NT. Lire et utiliser les variables Pour lire le contenu dune variable, on lencadre de deux % . Ces deux signes indiquentlinterprteurquildoitremplacerlenomdelavariableparsoncontenu. Silavariablenexistepas,aucuneerreurnestaffiche,maislavariableest remplace par une chane de caractres nulle. Soit nom une variable contenant un nom afficher. On pourrait utiliser : Echo Bonjour, %nom% ! Silavariable nom contientunevaleur,celle-ciremplacedoncdanslebatchla chane %nom% .Siparexemple,cettevariablecontientletexte Mathieu , alors, linterprteur verra la ligne suivante : Formation Batchwww.astase.com Page 20/90 Echo Bonjour, Mathieu ! et affichera lcran Bonjour, Mathieu !. Cette variable peut-tre insre nimporte ou dans votre batch, combine nimporte quellecommande.Silavariable rep contientuneadressedutype C:\DOSSIER1 , vous pourrez lutiliser avec dautres commandes comme : @echo off cls echo Cration du repertoire %rep% mkdir %rep% echo %rep% a ete cree. Cequidonnerapourlinterprteurleslignessuivantes,quilexcuteradesuite(si rep contient bien C:\DOSSIER1 ) : @echo off cls echo Cration du repertoire C:\DOSSIER1mkdir C:\DOSSIER1echo C:\DOSSIER1a ete cree. Faites bien attention si la variable sur laquelle vous travaillez nest pas vide. Dans les 2 cas suivants pris en exemple, si nom est vide, cela gnre des ractions plutt inattendues : Echo %nom% Donne : ECHOestactif ,puisquelinterprteur voit simplementla commande ECHO suivie de rien du tout il affiche donc ltat de lcho. Mkdir %nom% Donne Paramtre manquant ,puisquelinterprteurvoitencorelacommande mkdir seule sans paramtres. Formation Batchwww.astase.com Page 21/90 Manipulation des variables Exempledecrationdevariable-Noussouhaitonsdfinirunevariable "VersionWindows" contenant 98 SE Nous allons crire dans un Batch : Set VersionWindows = 98 SE .puislexcuter ;ilsemblequeriennesepasse:normal,cettecommandene produit pas de rsultat visible l'cran. Pour tester si notre ajout a t pris en compte, il suffit dajouter dans le batch "set" pourvoirsinotrevariableatajoutelalistedecellesdjdfiniessur lordinateur. Dans notre cas, il apparat : Notre variable a bien t ajoute. Nous pourrions lutiliser dans la suite du batch, par exemple : Echo La version de Windows installee est %VersionWindows% . Ajout de caractres Vous avez associ SysVer la chane Windows 95 . Imaginonsquevoussouhaitiezajouter -32bits lafindelachaneafinquela variable contienne un certain moment Windows 95 32 bits . Lapremiresolutionestsimple :ilfautredfinirentirementlavariabledansle batch, sous forme, par exemple : Set SysVer=Windows 95 32 bits Ilya-tilunesolutionplus lgante ,pluspratique ?Biensr !Vouspouvez entrer : Set Sysver=%sysver% - 32 bits Pour MS-DOS, cest simple : %sysver% sera remplace par sa valeur (rappelez vous quellecontientdjdesdonnes,enloccurrence Windows95 )avantquela ligne soit excute. Formation Batchwww.astase.com Page 22/90 Cela donnera donc pour le DOS : Set Sysver=Windows 95 - 32 bits Cela a le grand avantage de fonctionner quel que soit le contenu de la variable. Par exemple, supposons que votre batch contienne la lettre dune unit logique de votre PC dans la variable UNIT. Pour la transformer en chemin daccs comprhensible, il faudraluiajouter:\ .Eneffet,siUNITcontient c ,ilfaudraajouter:\ pour avoir ladresse valide C:\ . Avec cette technique, vous pourrez rajouter facilement :\ au contenu de la variable, quel que soit la lettre du lecteur. Vous pourrez donc taper : Set unit=%unit%:\ Suppression dune variable De la mme manire que SET x=y dfinit la variable xaveclecontenuy,onpeuttreamenvouloirdtruireunevariable(cequi dtruiranaturellementsavaleurassocie).Pour nettoyer lammoire,oubien vous serez peut-tre amen utiliser SET sous cette forme : Set NomDeVariable= Par exemple, pour supprimer de la mmoire la variable Folder , on tapera : Set Folder= VariablesremarquableCertainesvariablessonttoujoursprsenteslorsquevous utilisezDOSalorsqueWindowsestinstallsurvotremachine.Cestlecasdela variable Windir, qui pointe toujours vers le rpertoire de Windows. Imaginons par exemple que vous souhaitez effacer sur plusieurs postes le Dmineur fourni avec Windows (le nom de fichier est Winmine.exe , situ dans le dossier de Windows). Vous pourriez entrer dans un batch la ligne : DEL C:\WINDOWS\WINMINE.EXE Maisattention !SiC:\WINDOWSest lerpertoiredinstallationpardfaut,certaines configurationspossdentunrpertoirediffrent,dustyleC:\WIN98,C:\WIN2Kou biencarrmentC:\MONWINDOWS,etcPourviterleserreurs,vouspourriez utiliser la variable Windir et crire alors votre ligne : DEL %WINDIR%\WINMINE.EXE Formation Batchwww.astase.com Page 23/90 Delammefaon,ilexistedautresvariablespointantsurdesrpertoiresoudes fichierscruciauxdeWindows(voircapturedcranraliseplushaut),envoici quelques-unes : -TEMP, qui contient le chemin du rpertoire temporaire de Windows, -COMSPEC,quipointeverslinterprteurDOS(gnralement COMMAND.COM CMD.EXE sous NT), -WINBOOTDIR,quicontientladressedurpertoirededmarragede Windows, -PROMPT, qui contient le texte dinvite, -PATH,quicontientlalistedes rpertoiresutiliserpourlarecherchedes fichiers (voir plus bas). SousWindowsNT,denombreusesautresvariablesdenvironnementsont prsentes : -COMPUTERNAME, qui contient le nom de lordinateur, -HOMEPATH, qui contient le rpertoire de dpart de lutilisateur connect, -LOGONSERVER, le serveur ayant valid la connexion de lutilisateur,* -OS, qui contient le type de lOS lanc (Windows_NT) -NUMBER_OF_PROCESSORS,quicontientlenombredeprocesseursde la machine, -PROCESSOR_ARCHITECTURE,quicontientlecodedelarchitecturedu processeur, -USERNAME, qui contient le nom dutilisateur logu, -USERDOMAIN qui contient son domaine, -USERPROFILE qui contient son rpertoire personnel, etc. Ilestrecommanddutilisercesvariablesleplusquepossiblepourrendrevos batchs souples et compatibles avec tous systmes. Dfinition de variables persistantes On appelle gnralement variables de session ou variables persistantes des variables dfinies chaque dmarrage,et dont laprsenceest permanente jusqu lextinctiondelordinateur.Parexemple,lelogicielMASM(cittitredexemple), rajoute de nombreuses variables de session contenant les dossiers dinstallation, afin quil puisse traiter des fichiers dans ces dossiers sans manipuler directement ceux-ci. A)Dfinir une variable persistante sous Windows 9x Pour crer vos propres variablespersistances, ditez AUTOEXEC.BAT, et inscrivez lalignededfinitiondevariablecorrespondante.Parexemple,votrerpertoirede travail estC:\ROMAIN\WIN32\ASM\DEBUG,etvoussouhaitez stockercelui-cidans la variable Dossier : vous entrerez donc nimporte ou dans Autoexec.bat : SET Dossier=C:\ROMAIN\WIN32\ASM\DEBUG Formation Batchwww.astase.com Page 24/90 toutmoment,vouspourrezutiliser Dossier pourdsignervotrerpertoirede travail.UnsimpleCD%Dossier%sousDOSvousplaceradanslerpertoire correspondant,sansavoirtaperunefastidieuselignedecommande.Idemdans vosBatchs :vousmanipulerezfacilementcerpertoiredanstouteslesoprations sur les fichiers. Attention :pourquelavariablepuissetredfiniechaquedmarrage,ilfaut imprativement que AUTOEXEC.BAT soit chaque fois excut ! B)Dfinir une variable sous Windows NT 1) Ouvrez le Panneau de Configuration, puis litem Systme 2) Cliquez sur longlet Avanc 3) Cliquez sur le bouton Variables denvironnement Une fentre similaire celle-ci apparat : La liste du haut prsente les variables denvironnement persistantes pour lutilisateur (et uniquement lutilisateur logu), la liste du bas pour tous les utilisateurs du poste. Pour ajouter une nouvelle variable, cliquez sur Nouveau puis renseignez un nom de variable et une valeur. Vous pouvez galement modifier une variable existante ou en supprimer une. QuevoustravaillezavecWindows9xouWindowsNTvousdevezredmarrer votre poste pour enregistrer les changements. Formation Batchwww.astase.com Page 25/90 Paramtres Votrebatchestassimilunprogramme.Commetoutprogramme,ilpeutrecevoir des paramtres. Onappelleparamtretouslesargumentspasssunprogrammeouune commande. Prenons lexemple dun formatage de disquette. Sous DOS, vous pourriez entrer : Format a:

La simple ligne Format a : fait rfrence un programme (en loccurrence ici un excutable nomm format.exe ). Et a: est pour lui un paramtre, cest--dire une information supplmentaire quil peut lire et traiter. Les paramtres sont toujours spars par des espaces. Lorsquils sont encadrs de guillemets,lesespacescontenusdansleschanesnesontpasprispourdes sparateurs.Lorsquelesguillemetssontutilissilsserventuniquementpourla transmission mais sont supprims aprs par MS-DOS. Par exemple : FORMAT a: /V:MaDisquette /B /C FORMAT est la commande, A: est le premier paramtre, /V:MaDisquette]est le second paramtre /B est le troisime paramtre, /C est le quatrime paramtre, etc PrenonslexempledunbatchquidoiteffacertouslesfichiersTMP(*.TMP)dun dossier.Silebatchestcapablederecevoircommeparamtrelerpertoiredans lequel il doit oprer, on pourra par exemple lappeler sous DOS : Batch1.bat C:\DEMO Pour quil supprime tous les fichiers TMP du rpertoire DEMO . Vouscomprenezmaintenantlintrtdesparamtres :celaintroduitunesortede modularitetunenouvellesouplessedanslaprogrammation.Onpeutcrerdes batchs qui sont des sous-programmes , recevant des infos via les paramtres. Il est important de noter que vous ne pouvez pas sous Windows envoyer directement desparamtres(ledouble-clicpourlancerunexcutableempchetoutefrappe clavier).Cependant,vouspouvezouvriruneconsoleDOSdansWindows,vous placerdanslerpertoiresouhait,puislancerlapplicationenluienvoyantdes paramtres par la ligne de commande DOS, ou diter un fichier PIF pour cela ces notions seront abordes ultrieurement. Formation Batchwww.astase.com Page 26/90 Concrtement,unbatchpeutrecevoirdesparamtresdirectementaccessiblesvia les variables de %1 %9. Il est possible de dcaler le contenu de ces variables pour exploiter les autresparamtres reus sil y a plus grce la commande SHIFT voque plus bas. La variable %0 correspond quant elle au chemindu batch. Contrairementauxvariablesclassiques,onobserve3grossesdiffrences :onne peut pas les modifier, elles ne sont pas encadres par 2 % (seulement prcds dun seul % ), enfin, elles sont spcifiques pour chaque batch. Vous pouvez tester cela en crant le batch suivant : @echo off echo L'adresse de ce fichier est %0 echo Le premier parametre est %1 echo Le second parametre est %2 echo Le troisieme parametre est %3 echo Le quatrieme parametre est %4 Dans le cas o vous n'envoyez aucun paramtre (vous lancez simplement le fichier), vous obtenez un rsultat de ce type : Comme vous le constatez, rien n'apparat la place des %1 %2 %3 et %4 : en effet, nous n'avons pas envoy de paramtre l'application, c'est donc normal. Envoyezmaintenant3paramtres,parexemple"/V"pourlepremierparamtre, "ABC.EXE" pour le second, et "C:\" pour le troisime. Sous DOS, vous pouvez lancer le fichier en le faisant prcder de son adresse, puis en envoyant les paramtres, par exemple : C:\Tests\Monbatch.bat /V ABC.EXE C:\ Vous pouvez procder plus facilement avec PowerBatch :PowerBatch 5.0 5.5 : Entrez simplement ces paramtres dans la bote de dialogue affiche juste avant nimporte quel test, PowerBatch5.6etplus :Lesparamtressontdfinisdanslabotededialogue Paramtres du menu programme et envoys chaque test. Rsultat dans les deux cas : le fichier est excut avec les paramtres entrs. Ce qui donne : Formation Batchwww.astase.com Page 27/90 Ce qui est ici parfaitement logique. On a dit que les paramtres taient spars par des espaces. En appelant le mme fichierbatchqueceluiprcdemmentcreetenluienvoyantlaligne Ceci est lexemplemmedunelonguelignedeparamtres ,lebatch saucissonnera votrephraseenluiassociantunmotpourchaqueparamtre. Cestdirequesivotrephrasecontientplusdeneufmotsilfaudrapniblement dcaler toutes les variables jusqu rcuprer la phrase complte. Pour outrepasser cette gne et vous assurer que vos paramtres aient une longueur fixeaccentsoupas,encadrezvoslongueschanesdeguillemets.Ilsinhibentles espaces de la phrase et permettent que celle-ci soit stocke dans une seule variable. MS-DOS tant compatible avec cette technique, vous pourrez manipuler vos fichiers avec nimporte quel excutable. Riennempchedassocierunevariabledenvironnementunparamtre.Cela permettra mme de conserver la valeur du paramtre en dehors du batch qui la fix. Exemple :supposonsquevotrebatchreoitcommepremierparamtreladresse dun dossier sur lequel il doit agir. Vous pourrez entrer : Set Dossier=%1 PourmanipulerdansvotreBatchcedossiersousunnom plus explicite,oupour permettre dautres Batch lutilisation de ce rpertoire. Pour dcaler les paramtres contenus dans les variables de %1 %9, utilisez la commandeshift.%1passedans%0,%2dans%1etainsidesuite...Et%0est perdu.Avecshiftvouspouvezaccderau11paramtre :quiest transfr dans %10. Vous pouvez ainsi appeler shift autant de fois que vous voulez, pour avoir accs aux paramtres supplmentaires. Exemple : Le batch suivant copie le dossier C:\Travail vers le rpertoire pass en paramtre n1 grce XCOPY : @echo off echo Sauvegarde de vos fichiers... Xcopy "C:\Travail" "%1" /D /S /C /L echo Termine ! Unautreexemple,quipermetdafficherlesdossiersdunrpertoiregrceune squencedecommandeparticulire.Cestledir %1 quidclenchelelistage des lments contenus dans le dossier pass en paramtre. Echo off Echo Voici la liste des repertoires contenus dans %1 : dir "%1" | grep "" | tr -s " " | cut -d " " -f 4 Formation Batchwww.astase.com Page 28/90 La variable %PATH% VoussavezcertainementquesousMS-DOSilexistedeuxtypesdecommandes : lescommandesinternesinclusesdanslinterprteuretlescommandesexternes constitusdexcutablesplacsdansdesrpertoiresspciaux.Nousallonsnous intresserlamaniredontMS-DOSgrelelancementdescommandesviala variable %PATH%. On rappellequepour lancer un fichier .EXE, .COM ou .BAT, il n'est pas ncessaire deprciserl'extensiondecesderniers.Parexemple,lorsquevoustapezla commande FORMAT, vous faites rfrence au programme FORMAT.COM.MaiscommentMS-DOStablit-ilcelien ?Gnralement,lorsquevoustentezde lancer un excutable nexistant pas dans le rpertoire courant (et gnralement il ny aaucunprogrammedecenomdanslerpertoirecourant !),leDOSrenvoieun messagedutype 'ts32'n'estpasreconnuentantquecommandeinterneou externe, un programme excutable ou un fichier de commandes. . Par consquent, on peut en dduire que comme il ne trouve pas lexcutable dans ce rpertoire, MS-DOSvachercherailleurs,dansdautresdossiers,silnepeuttrouverlefichier demand. Cest le rle de la variable PATH. Elle contient tous les rpertoires que MS-DOS doit explorersionluidemandedexcuterunfichiernexistantpasdanslerpertoire courant.Ainsi,sivoustapez ts32 danslinvite,leDOSvachercherdansle rpertoireouvert,puisdanslepremierrpertoirecontenudansPATH,puisdansle secondjusququetouslesrpertoiresdePATHaienttexplors.Siaucun fichierBAT,COMouEXEnattrouvcestade,MS-DOSaffichelemessage derreur inclus ci-dessus : xxx nest pas reconnu en tant que commande Path estunevariabledenvironnement(persistante,biensr !)dontlecontenu peut tre classiquement affich par un echo %PATH% . Voil un exemple possible de rsultat : Vousremarquezquetouslescheminssontsparspardespointsvirgules.Donc, lorsque sur le poste dont est tir la capture on tape une commande, si un fichier du mmenomnexistepasdanslerpertoirecourant,MS-DOSvaparcourirtousles chemins affichs ci-dessus jusqu trouver (ou non) lexcutable demand. Vousremarquerezquelestroispremierscheminsonttinsrsparetpour Windowspuisquilsdemandentdabordchercherdescommandesdans C:\WINDOWS,C:\WINDOWS\system32etC:\WINDOWS\system32\WBEM.Les autresadressesonttinsrspardeslogicielsinstalls,soientautomatiquement, soit en demandant lutilisateur de modifier la variable PATH manuellement. Formation Batchwww.astase.com Page 29/90 SachezqueMS-DOSnexplorepasrcursivementlesdossierscontenusdans PATH :lessous-dossiersdesdossiersinclusneserontpastraitssaufsivousles insrez eux aussi leur tour dans PATH. 3) Ajouter un chemin d'accs la variable PATH VousaurezparfoismodifierlavariablePATHpouryajouterdesdossiers.Etant donnquePATHestunevariable persistante ,vousdevrez,sivoustessous Windows9x,manipulerAUTOEXEC.BAT ;danslecaschant,lamodifierdansle panneau de configuration Windows. Sous Windows 9x ou dans un Batch CettemanipulationestvalidesivousvoulezmodifierlePATHuniquementsous Windows9x,oubientemporairementdansvotreBatch.Laspect temporaire peut-treutilispourviterdansunBatchderetaperlemmechemindaccs plusieurs fois, mais rappelez vous quune fois le Batch termin PATH retrouvera sa valeur antrieure. Comme vous lavez appris prcdemment, on peut ajouter facilement des donnes une variable en utilisant la forme suivante : PATH=%PATH%;CHEMIN_A_AJOUTER LepointvirgulenestncessairequepourqueleDOSpuisse sparer les diffrentsrpertoirescontenusdansPATH.Ilestsuperfludansunelignene dfinissant pas PATH. Imaginons que la variable PATH contienne C:\WINDOWS;C:\WINDOWS\COMMAND NoussouhaitonsajouterpourunprogrammeparticulierlecheminC:\mingw\bin. Eneffet,cedossierBINcontientdescommandesquidoiventpouvoirtresaisies comme des commandes DOS standard. On inscrira donc dans Autoexec.bat : PATH=%PATH%;C:\mingw\bin Ce qui donnera pour le DOS au moment de lexcution dAutoexec : PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\mingw\bin Sous Windows NT Rouvrezlafentre Variablesdenvironnement duPanneaudeconfiguration Systeme . Reprez dans la liste Variables denvironnement la variable PATH, puis cliquez sur Modifier : Formation Batchwww.astase.com Page 30/90 Ajoutez le chemin daccs dsir ; pour reprendre lexemple pris pour Windows 9x, il vous suffit dentrer la suite des donnes existantes C:\mingw\bin : Vrifiezbienquunpointvirguleprcdelachaneentre,puiscliquezsurOK. Redmarrez votre systme. Tests et conclusion Maintenant,imaginonsquevoussouhaitezlancergcc.exesitudans C:\mingw\bin Sans avoir fait cette manipulation vous auriez du entrer par exemple : C:\mingw\bin\gcc.exe test.c o test.exe Maintenant vous pouvez taper simplement : gcc test.c o test.exe Formation Batchwww.astase.com Page 31/90 4) Saut, Boucles En principe, les lignes de commande sont traites les unes aprs les autres dans un fichierBatch.Toutefois,danscertainscas,onestobligdesauterdeslignespour reprendreletraitementunautreendroitdufichieroubienrpterindfinimentun blocdecode.C'estdanscescas-lquenousallonsutiliserlescommandesde boucle. Onassociesouventunecommandedesautunecommanded'instruction conditionnelle (voir chapitre suivant), ou lorsqu'un bloc de commande doit tre rpt indfiniment. C'est sur ce cas quenous allons nous pencher pour l'instant. Notre premire boucle Pour faire une boucle, il nous faut deux commandes : 1)LapremireestlacommandeGoto,(del'anglaisGoToquisignifie"aller") qui, accompagne du nom du Label, indique l'ordinateur, quand il doit se rendre l'tiquette du mme nom. 2)La seconde est un "Label", c'est--dire une tiquette pose dans le programme l'endroit ou la boucle doit recommencer. Cest comme un tltransporteur : Il faut un appareil de dpart (Goto) qui propulse le voyageur versle secondpoint(Label),pouvanttreplacavantouaprslappareil de dpart, qui reoit le voyageur. Pour continuer avec cette analogie, si lappareil darrive est plac avant lappareil de dpart,onobtientuneboucle sansfin ,cest--direquinesarrtejamais.Si lappareil darrive est plac aprs lappareil de dpart, on a ralis un saut dans leprogramme,puisquesilonsereplacedanslecadredunbatchlescommandes entre les deux appareils sont vites. Par exemple : Commande 1 Commande 2 Label BONJOUR Commande 3 Commande 4 Commande 5 Goto BONJOUR Lescommandes1,et2,sontexcutesunefois,alorsquelesautrescommandes sont excutes en boucle, puisque le programme rencontre "GOTO", va au label du mme nom, continue, rencontre nouveau "Goto", retourne au label , etc Formation Batchwww.astase.com Page 32/90 Un label se prsente sous la forme : :NomDuLabel Lenomnedoitpasdpasser8lettres(silenomdulabeldpasse8lettres, seulesles8premireslettresserontprisesencompte),etnepastre composd'espaces.Ladiffrencemajuscule/minusculenestpaspriseen compte pour les labels et les Goto. Par exemple :Debut est un nom valide pour un label Un"Goto"seprsentesouslaformedecettecommandesuiviedunomdulabel, par exemple : Goto Debut pour aller au label "Dbut". Allons ypour une boucle infinie ! Nous voulons afficher "Hello, World !" en boucle. Nous crirons donc : @echo off :Start echo Hello, World ! Goto Start Lenom du label est librement configurable, vous pouvez prendreun tout autre nom que"Start",l'essentieltantquelenomdulabeletlenomquisuitle"Goto"soient identique Vous obtiendrez un rsultat de ce type : Formation Batchwww.astase.com Page 33/90 Signe que notre programme a bien boucl Reprenons :lorsquelinterprteurrencontre Goto ,ilanalyse lenomdulabelqui lesuitetlecherchedanstoutlebatch(ilpeut-treavantouaprslinstruction GOTO).Ilsaitquildoitletrouverprcdde : ,indiquantquilsagitdunpoint dentrepotentielduprogramme.Ici,iltrouvelelabelavantleGoto :ilsebranche doncdessusetreprendsonexcution,etretrouvantdenouveaulemmeGoto,le cycle recommenant indfiniment Nous pouvons de la mme faon viter un bloc de code : Commande 1 Commande 2 Goto Jmp1 Commande 3 Commande 4 Commande 5 :Jmp1 Commande 6 Commande 7 Quellesserontlescommandesexcutes ?Rponse :lan1,n2,n6,etn7.Les commandes de 3 5 sont ignores. Quel est alors lintrt de cette forme : puisque detoutefaonlescommandes3,4,et5neserontpasexcutes,pourquoiles entrer dans le Batch ? Vousverrezultrieurement que selonquuneconditionsoitvraieoufausse,laligne GotoJmp1 pourratreexcuteounon.Danscecas,lexcutiondes commandes3,4,et5seraconditionnellevouspourrezdoncexcutercertaines instructions dans des cas prcis uniquement. Dernires prcisions sur les commandes de saut : -Deux labels ne peuvent pas porter le mme nom, -Un goto pointantsurunlabelinexistantgnreuneerreurlorsde lexcution. Formation Batchwww.astase.com Page 34/90 5) Excution conditionnelle la commande "IF" Voici une commande qui permet d'introduire des conditions dans les fichiers batch. Si la condition formule est remplie, le reste de la ligne de commande est excute, et le programme continue normalement, sinon le reste de la ligne n'est pas excut, et le programme continue galement. Attention:seulelafindelaligneestexcute,parconsquentseuleuneunique commandepeut-treconditionnelle,cequipeutparfoisposerdesproblmes.Dans ce cas, utilisez la commande GOTO pour aller un endroit particulier si la condition est remplie. Syntaxe d'utilisation : If ""=="" Il est important de : -Toujours encadrer la condition et la valeur tester par des guillemets, -De veiller utiliser, lors d'un test, le double signe gal (== au lieu de =) -Se rappeler que "" reprsente une seule commande excuter. Vouspouvezbiensurcomparerdesvariablesavecdesvaleursoucomparerdes variables ensembles, mais n'oubliez pas de les encadrer par des guillemets. Pourquoi?Parcequ'l'excution,lavaleurdesvariablesvientremplacerleur criture,etsiunevariableestnulle,MS-DOSgnreuneerreurcarilnepeut compareruntermequin'existepas.Parcompte,s'ilyadesguillemets,MS-DOS "comprend" qu'il fait une comparaison avec une variable vide. Exemple : If "%1"=="/AIDE" ECHO Ce texte sera affiche Ici,onvatreconduitcomparerlecontenudelavariabled'environnement paramtre n1 avec le texte "/AIDE". Si ceux-ci sont identiques, un texte sera affich l'cran. Attentionladiffrencemajuscules/minuscule.Commenousavonsdit prcdemment,MS-DOSdiffrencielescontenusdesvariablescomparer.Par exemple,sil'utilisateuraentr"/Aide"ou"/aide"aulieude"/AIDE",laconditionne sera pas valide. Formation Batchwww.astase.com Page 35/90 Dautres formes de IF sont utilisables. Par exemple : IF NOT Condition Vrifie si la condition est remplie. Si oui, la ligne suivante est traite, sinon, le reste de la commande est excute. C'est en fait "l'inverse" de la commande IF. Exemple : If not "%ScoreJoueur%"=="%ScoreMax%" echo Peut mieux faire ! IF EXIST Fichier Vrifiel'existencedufichierdsign.Silexiste,lerestedelaligneesttrait, sinononpasselalignesuivante.Cetypedecommandepeut-treaussi utilis sous la forme "If not exist", dans ce cas le reste de la commande est trait que si le fichier n'existe pas. Il est aussi important de noter que vous n'tes pas oblig d'utiliser des guillemets puisque le paramtre reprsentant le fichier ne peut-tre nul. Exemple : If exist c:\Autoexec.bat Copy autoexec.bat autoexec.old IF ERRORLEVEL Vrifie le numro de message d'erreur. DescommandesMS-DOSrenvoientunnumrospcialaufichierbatchen cas de problme ou d'erreur, dsign par ERRORLEVEL. ERRORLEVEL vaut toujours0 si aucune erreur ne s'est produite. MS-DOS excute le reste de la ligne si ERRORLEVEL est gal ou suprieur la valeur spcifie. NOTE : Le travail avec ERRORLEVEL est approfondi ultrieurement. ATTENTION. Si vous devez tester plusieurs valeurs de ERRORLEVEL, testez les de la plus grande la plus petite (ex : if errorlevel 255.. if errorlevel 100 if errorlevel 50,etc)car comme dit ci-dessus,MS-DOSexcute le reste de la ligne si ERRORLEVEL est gal ou suprieur la valeur spcifie. Iln'yapasbesoindesigne"="entreERRORLEVELetlenombre reprsentant sa valeur. Exemple : Format a: If errorlevel 3 echo Vous avez annule FORMAT par Ctrl+C ! Formation Batchwww.astase.com Page 36/90 Utilisation avec la commande GOTO : NousavonsutilislacommandeIFpourintroduiredesquestionsdanslesfichiers Batch. Il serait souhaitable maintenant d'utiliser plusieurs commandes en fonction du rsultat de la question. Voil comment nous allons procder : If "" == "" Goto Suite Commande 1 Commande 2 :Suite Commande 3 Ainsi, si 12, les commandes 1, 2 et 3 seront excutes, sinon, la commande 3 sera excute et les commandes 1 et 2 vites. @echo off If not "%1"=="/?" Goto Suite Echo Voici l'aide de ce programme Echo Goto fin :Suite Echo Pour commencer, pressez une touche Pause :Fin REM Fin du batch Danslecasci-dessus,sileparamtreenvoyaubatchn'estpas"/?";les commandesaprs"Suite"sontexcutes.Sinon,letexted'aideestaffich.Ona utilisun second label FIN afin que dans le casou le texte daideestaffich, le programmenesoitpasensuiteexcut,maisquecelui-cisetermineaucontraire directement. UnautreexemplepeuttreceluidunfichierBatchcopiantlefichierpassen premierparamtreverslefichierensecondparamtre.Ontestetouslescasde figure pourque la copie se passe bien, cequi conduitprendre desbranchements particuliersdansdessituationscritiques(leslabelscorrespondantnontpast inclus) : @echo off If %1== goto PasSource If %2== goto PasCible If not exist %1 goto PasSource If exist %2 del %2 Echo Copie de %1 vers %2 Xcopy %1 %2 /V /K If not exist %2 goto ErreurCopie [etc] Formation Batchwww.astase.com Page 37/90 Le code suivant permet de se brancher au label PasNT si le poste nest pas quip de Windows NT : If not %OS% = Windows_NT goto PasNT Windows NT permet dutiliser les oprateurs suivants avec IF : EQU - gal NEQ - diffrent de LSS - infrieur LEQ - infrieur ou gal GTR - suprieur GEQ - suprieur ou gal . De plus, il permet dignorer la diffrence majuscules / minuscules entre les deux expressions comparer en utilisant le commutateur /I Par exemple, le Batch suivant monte un disque rseau uniquement si lutilisateur est ladministrateur : If /I %username% EQU Administrateur net use H: \\WEB01\C$ On peut crer une pseudo boucle for sous Windows NT if not defined i set i=0 :startfor set /a i=i+1 REM La commande sera excute 10 fois : echo Exemple : i vaut %i%if %i% LSS 10 goto startfor Avecset/a,lavariableestchaquefoisincrmente.Tantquecelle-ciest infrieure 10, goto startfor sera excute et la commande rpte 10 fois. WindowsNTpermetaussidutiliserlemotclDEFINEDquitestesilavariable denvironnement transmise est dfinie. Parexemple,leprogramme TPSCAN estlancuniquementsilavariable denvironnement persistante PS2 est dfinie sur le systme : If defined PS2 start /MAX tpscan.exe Formation Batchwww.astase.com Page 38/90 6) Boucles avec FOR Aprsavoirfaitconnaissanceavecunetechniquedelaprogrammationdessauts inconditionnels (Goto), en voici une autre. Nous allons crer un batch qui va afficher successivement les chiffres 1 4. Ecrivez le fichier batch suivant : @echo off for %%A in (1 2 3 4) Do Echo C'est le nombre %%A CefichierBatchcontientuneboucleFORDO.Aquoisert-elle?Toutd'abord, %%Aestutilisseulemententantquenomdevariable.Cettevariableprendalors toutes les valeurs de la liste spcifie entre les parenthses : dans notre cas, %%A prenddoncsuccessivementlesvaleurs1,2, 3,et4.Lesvaleursconstituant laliste doiventtresparesentreellespardesespaces,desvirgules,oudespoints-virgules. Ensuite, la commande qui suit immdiatement est excute avec la valeur prise par lavariable%%A.Dansnotrecas,onverral'cranlemessage"C'estlenombre" suivi de la valeur de la variable chaque excution de ECHO. Un autre intrt de cette commande est que les lments de la liste peuvent tre des noms de fichiers. Ainsi il est possible d'excuter une seule commande pour plusieurs fichiers. Vous pouvez donc afficher l'cran plusieurs fichiers la fois avec un seule commande qui est TYPE : FOR %%A IN (AUTOEXEC.BAT CONFIG.SYS) DO TYPE %%A Vous pouvez aussi utiliser les caractres gnriques, par exemple : FOR %%A IN (*.TXT *.BAT) DO TYPE %%A Tous les fichiers texte et Batch s'afficheront l'cran. Avec Windows NT, les valeurs peuvent tre extraites dun fichier, en utilisant loption /f .Parexemple, lecode suivantenvoieunmessageavecnetsendenlisantles IP des destinataires enregistres une par ligne dans le fichier dest.lst : FOR/F%%AIN(dest.lst)DOnetsend%%AAttention, redemarrage du serveur en cours... Vouspouvezextrairedesvaleursdepuisunfichiertextecomposdeplusieurs champs, par exemple : Formation Batchwww.astase.com Page 39/90 ;Fichier de configuration ;Compos de : ;Utilisateur / IP / Domaine / ID Rabusier,10.173.113.2,Astase,F017C GDM,10.173.113.3,Astase,F017D Hmaster,10.173.113.5,Astase2,F100 Nobody,10.173.113.10,Astase2,F200 For mets pour cela votre disposition plusieurs options qui devront tre mises entre guillemets et spares par des espaces : -Eol= :spcifieuncaractredefindeligne.Seulleschanes situes avant ce caractre seront traites. On peut utiliser cette commande pour exclure des commentaires comme les 3 premires lignes du fichier ci-dessus, qui commencent par ; . -Delims= :spcifieledlimiteurdechamp.Pardfautcesont les espaces et les tabulations. Dans notre exemple, le dlimiteur de champ est la virgule car les lignes utiles contiennent les informations spares par des virgules. -Tokens= :spcifielaoulespartiessparesparDelims extraire.Parexemple,pourextrairelechampDomainedufichierci-dessus, Tokens devra valoir 3 car cest le troisime champ prsent. Poureffectuerlalistedesutilisateurs(premierchamp)dufichierdata.dat contenant les lignes de code ci-dessus, on tapera dans un batch : @echo off echo Liste des utilisateurs (dapres data.dat) : for /f "eol=; tokens=1 delims=," %%a in (data.dat) do echo %%a De mme, pour effectuer un ping sur toutes les IP contenues dans le mme fichier (champ n2) : @echo off echo Ping en cours : for /f "eol=; tokens=2 delims=," %%a in (data.dat) do ping %%a Imaginons une autre structure de fichier : La premiere ligne : un commentaire La seconde : aussi La troisime : galement RootPath:C:\Program Files\Qserv\ WebPath:C:\Program Files\Qserv\www\ CGIPath:C:\Program Files\Qserv\cgi-bin\ Formation Batchwww.astase.com Page 40/90 Noussouhaitonsaffichertouslesdossiersdsignsdanscefichierlaidedela commande start. Le premier problme est que le dlimiteur est le caractre : et que la chane sa droitepeutaussiencontenirnentantpas,commecestlecasavecleschemins entrs. Il faut donc rcuprer les lignes partir second champ. Aussi vous pouvez utiliser la syntaxe tokens=x,y,z.. qui dsigne LES lments slectionner.Nouspourrionschoisirdcriretokens=2,3pourslectionnerle second et le troisime champ, mais il est plus lgant dutiliser le caractre * qui demandeextrairetoutlerestedelalignepartirduchampprcdent ;la commande devient donc : tokens=2,* Lesecondproblmeestqueles3premireslignes,bienquecontenantdes : , sontdescommentairesquilfautexclure.Vouspourrezutiliserlattributskip=nqui exclutlesnpremireslignesdufichier.Ainsi,vousentrerezpourignorerles commentaires de ce fichier : skip=3 Le batch exploitant ce fichier pourra donc scrire : @echo off echo Voila les chemins du fichier : for /f "skip=4 tokens=2,* delims=:" %%a in (data.dat) do start %%a:%%b Vous remarquerez la syntaxe un peu obscure de la commande echo %%a:%%b. For placechaquechaneextraitecorrespondantuntokendansunevariable diffrente :ilenfautdoncici2,unequicontiendralesecondchamp(a)etunele reste(b).Enfin,ledlimiteurnestjamaisprisdansleschanes,ilfautdoncle rajouter en linsrant entre les deux variables. Forpeuttreutilispouranalysernonplusunfichier,maislersultatdune commande.Celle-cidoittreencadredeguillemetsinverse(`commande`)et insre la place du fichier trait. Utilisezalorssystmatiquementlattributusebackqpourconfirmerlutilisationdes guillemetsinverssetpermettrelinsertiondeguillemetsnormauxdanslalignede commande excute. Parexemple,lebatchsuivantaffichetouteslesvariablesdenvironnementdfinies sur votre systme : @echo off echo Variables definies : FOR /F "usebackq delims==" %%i IN (`set`) DO echo %%i Lacommandeexcuteratplaceentreguillemetsinverss,cest set, elle affiche toutes les variables dfinies et leurs valeurs. Il a fallu extraire uniquement les nomsdesvariables :celaatralisenspcifiantqueledlimiteurtaitlesigne gal (en effet la syntaxe daffichage est toujours Nom=Valeur), do lexpression un peu curieuse delim== Nousnavonspasspcifiavectokenquenoussouhaitionslepremierchampcar par dfaut cest toujours celui-ci qui est pris si rien nest prcis. Formation Batchwww.astase.com Page 41/90 Un autre exemple qui part de la question : comment afficher uniquement le nom des dossiers dun rpertoire ? Avant dcrire la commande, on chercheune stratgiequi pourrait tre semblable celle-ci : -Excuterlacommande dir*. quinaffichequelesrpertoireset transmettre son rsultat FOR, -Ignorer les 5 premires lignes qui contiennent des commentaires apports par MS-DOS sur la structure de fichiers du disque, -Lenomdesrpertoirestantprcdde,onextraitdoncles rpertoires en utilisant > (dernier caractre avant le nom) et en prenant uniquement la seconde partie de la ligne. Cela peut se traduire ainsi : @echo off echo Repertoires du dossier courant : FOR /F "skip=5 usebackq delims=> tokens=2" %%i IN (`dir "*."`) DO echo %%i For peut tre galement utilis pour analyser une chane. La chane doit simplement tre spcifie entre guillemets, par exemple : @echo off echo Ecriture du nom du PC dans C:\nompc.txt for/f"delims=="%%ain("%computername%")doecho %%a>>c:\nompc.txt Un autre exemple, ce batch renomme le fichier pass en paramtre en lui incluant la datedujour.Lepremierparamtredoittrelenomdufichieretlesecondson extension. Les / de la variable date sont transforms en _ avec for pour ne pas tre pris pour des sparateurs de dossiers par Windows: @echo off if "%1"=="" goto PasSource if not defined date goto PasDate REM - La date stocke dans %date% contient le signe "/" REM qu'on ne peut utiliser pour renommer les fichiers car REM c'est un caractre spcial de Windows. On le remplace donc par "_" for/f"tokens=1-3delims=/"%%ain("%date%")doset newdate=%%a_%%b_%%c REM - On renomme le fichier ren "%1" "%1_%newdate%.%2" Aveclecommutateur/L, Forpeuttreutilispourgnrerunesuitedenombres comme son homologue implment dans les langages de haut niveau : FOR /L %%variable IN (dbut,pas,fin) DO commandes Formation Batchwww.astase.com Page 42/90 %variableprendssuccessivementlesvaleursnumriquesallantde dbutfin parpasdepas.Parexemple,letriplet(1,1,10)excutedixfoislacommande,la variableprenantlesvaleurs1,2,3,410.Letriplet(-5,1,15)gnredesvaleurs croissantes de -5 15. Le triplet (0,10,200) excute vingt fois la commande ( cause dupasde10etdelalimitefixe200),lavariableprenantlesvaleurs 0,10,20,200. Enfin, le triplet (15,-1,0) gnre quand lui une suite dcroissante de 15 0. Pour rpter dix fois une commande, vous pourrez ainsi entrer : for /l %%a in (1,1,10) do [commande] Pour supprimer les 100 fichiers texte portant des numros pairs (0.txt, 2.txt, 4.txt) dans un rpertoire, vous pourrez utiliser : for /l %%a in (0,2,100) do del %%a.txt Enfin, Avec le commutateur /R, For peut tre utilis pour explorer des rpertoires et excuterdesactionsrptitivessurlesfichiersquileconcernent. Lasyntaxede cette forme est : FOR /R chemin %%variable IN (critre) DO commandes Si chemin est diffrent de . , tous les fichiers du rpertoire spcifi et de ses sous rpertoires compatibles avec le critre entr sont successivement mis dans variable. Sinon,seullesdossierssontprisencompte.Parexemple,pouraffichertousles batchs du rpertoire Windows, vous pourriez crer un fichier contenant : @echo off echo Liste des fichiers batch : for /R %windir% %%f in (*.bat) do echo %%f pause>nul cls De mme pour supprimer tous les fichiers TMP: @echo off echo Liste des fichiers batch : for /R %windir% %%f in (*.tmp) do del %%f pause>nul cls Enfin, pour faire une sauvegarde de tous les fichiers .h dun rpertoire pass en paramtre vers H:\SVG : @echo off if %1== goto PasSource echo Copie en cours... for /R %1 %%f in (*.h) xcopy %%f H:\SVG\*.* Formation Batchwww.astase.com Page 43/90 7) Redirections de sortieset criture dans les fichiers Vous pouvez lire et crire dans des fichiers, l'aide de commandes Batch. Nousavons dit dans le chapitre 1que la commande ECHO servait en fait "crire" quelquechosequelquepart.Pourl'instant,nousnoussommescontentd'"crire" sur l'cran, mais dans ce chapitre on va voir comment le faire sur le disque. Nous allons utiliser les chevrons (">" ou ">" sera crit dans "c:\texte.txt". Si le fichier n'existe pas, il sera cr et les donnes y seront inscrites sans gnrer d'interruptionsoud'erreurs,saufsileoulesrpertoireslecontenantn'existentpas eux-mmes, Le texte inscrire sera ajout la fin du fichier, Une nouvelle ligne sera cre dans le fichier chaque fois que vous appellerez la commande. Exemplepratique:voussouhaitezexcuterleprogrammeStartServer.exesitu dans C:\www, au dmarrage de votre ordinateur. Il vous suffira d'crire : Echo C:\www\StartServer.exe>>C:\Autoexec.bat La commande DOS c:\www\StartServer.exe sera inscrite dans Autoexec.bat et le programme lanc chaque dmarrage. criture en mode "Ecrasement" (Output) Contrairementaumoded'ajout,lemoded'crasementeffacetouteslesdonnes inscrites prcdemment dans le fichier, puis inscrit la ligne transmise. Formation Batchwww.astase.com Page 44/90 Nousallonsutiliser 1seul chevron orientvers ladroite, qui pointe vers le nom de fichier utiliser : Echo Texte crire>c:\texte.txt Commeprcdemment,toutletextecomprisentre"Echo"etle">"seracritdans "c:\texte.txt". Si le fichier n'existe pas, il sera cr et les donnes y seront inscrites sans gnrer d'interruptionsoud'erreurssaufsileoulesrpertoireslecontenantn'existenteux-mmes pas Lecontenudufichierseraautomatiquementeffac.Touteslesdonnesseront perdues et remplaces par le texte entre "echo" et ">" Par exemple, vous souhaitez sauvegarder le nom dutilisateur courant contenu dans %USERNAME% dans un fichier : Echo %USERNAME%>%WINDIR%\CurrentUser.lst Commenousl'avonsditplushaut,silefichiern'existepas,ilseracretles donnes y seront inscrites sans gnrer d'interruptions ou d'erreurs sauf si le ou les rpertoireslecontenantn'existenteux-mmespas.Ici,lerpertoirededestination est celui de Windows, il y a donc peu de chance pour que nous soyons dans ce cas de figure. Ecrire le rsultat d'une commande dans des fichiers Vous pouvez inscrire le rsultat d'une commande DOS dans un fichier, avec les deux modes dcrits plus haut ("crasement" et "Ajout"). Pour cela, vous n'avez qu' supprimer "Echo", et remplacer le texte crire dans le fichier par une commande MS-DOS. Par exemple : dir c:\*.*>>c:\listing.txt Le contenu du disque C:\ sera inscrit en mode "rajout" dans le fichier listing.txt La redirection vers "nul" "Nul" reprsente unpriphrique virtuel inexistant.Utilisavec ">"et ">>", ilpermet d'"crire"lersultatdecommandeversriendutout,cest--dire,enclair,deles masquer. Lacommandegauchede >nul estexcutecorrectement,maisson rsultat nest pas affich. Formation Batchwww.astase.com Page 45/90 Par exemple : Pause>Nul Letextenormalementaffichparlafonctionpause("Presserunetouchepour continuer") n'est pas affich, seule la fonction demeure (l'utilisateur doit presser une touche pour que le droulement du programme continue). Note:NULpeuttreaussiutilispourtestersiunlecteurexiste,avecune commande de la forme if exist g:\NUL faitquelquechose , "if" testant si un fichiervirtuelpouvantreprsentern'importequellmentenralitsurledisque existe. La redirection vers "prn" et les autres ports voquonsbrivementlaredirectionvers Prn :ellepermetdenvoyerdutexte limprimante : Echo test>prn Delammefaon,vouspouvezutiliserlaplacedeprntoutautresymbole dsignant un port : lpt1, lpt2, com1, com2 mais cela dpasse le cadre du tutoriel. Le symbole de redirection | Cecaractrederedirection,appel Pipe (canal,tuyau)enanglaispermetde redirigerlasortiedunecommandeverslentreduneautre.Cecaractresobtient en maintenant la touche ALT enfonc en tapant 124 au clavier (ou AltGr + 6). Prenons un exemple bien connu : en tapant DEL *.* afin deffacer le contenu dun rpertoire,unmessagedeconfirmationapparat,demandantlappuisurlatouche o (pourOUI)pourcontinuer.Ilseraitintressantdesupprimercemessagede confirmationquiinterromptledroulementdunbatchafinquelacommande sexcute toute seule sans besoin dune validation quelconque de lutilisateur. La commande suivante permet de rsoudre ce problme : Echo o|del*.* La sortie de la commande echo (le caractre o ) est envoye vers lentre delacommandeDEL.Lorsquelemessageseraaffich,MS-DOSconsidrerale caractre reu comme une rponseau messageet continueralexcution du batch. Dansnotrecas,ceseracommeune validation laquestion Pressezopour continuer, n pour annuler . Second exemple : A votre avis que fait la commande suivante ? ECHO.|DATE >> sauv.lst Formation Batchwww.astase.com Page 46/90 Rponse : La date est sauvegarde dans le fichier SAUV.LST Mais le message Entrez une nouvelle date (jj.mm.aa) : est valid par un retour chariot echo . : la sauvegarde se fait sans besoin dintervention humaine (pas besoin de valider lorsque le message demandant dentrer une nouvelle date apparat). Ce symbole facilite grandement le vie du programmeur Batch, qui peut ainsi imposer davance la rponse des messages DOS qui pourraient entraver lexcution de ses batchs. Note : On retrouve aussi ce caractre dans lutilisation quotidienne du DOS : le fait daccoler |more une commande standard permet que son rsultat, sil prend plusieurs crans, ne soit pas affich dun coup mais en autant de fois quil le faut pour faciliter la lecture. Ainsi, testez sous DOS : CD %WINDIR% DIR *.*|MORE La liste sera affiche en plusieurs fois : chaque cran, le DOS vous demande de presser une touche pour continuer le dfilement. Rediriger une entre vers une commande : le caractre < Beaucoupdecommandesncessitentlenvoidecaractrepourvaliderdes messagesourpondredesquestions.MS-DOSvouspermetderpondreces questions en lisant le texte envoyer dans des fichiers. Parexemple :crezavecEDITouNOTEPADunfichierlaracinedeC:\nomm test.txt.Inscrivez 6/12/02 ,puissauvezvotrefichier. Ouvrez ensuite une console DOS, placez vous la racine de C:\ si ce nest pas dj le cas, puis entrez : DATE>scr2bin echo RCX>>scr2bin echo 1db>>scr2bin echo W 0>>scr2bin debug < scr2bin > nul Les quatre premires lignes crivent des donnes dans un fichier scr2bin .Celui-ci est crit en mode Ajout en utilisant les doubles chevrons chaque ligne tant inscrite les unes aprs les autres. La cinquime ligne est plus complexe :onpeut dabord voirque le rsultatde cette ligneneserapasaffich :onutiliselaredirectionversnulvia > nul ,etquela commande debug est utilise. Au milieu, il reste < scr2bin : on comprend doncquelefichier scr2bin estenvoyauprogramme debug afindtre interprt. Le fichier est donc crepar lebatch, puis envoydebug, en masquant les commentaires/erreurs pouvant tre affiches par le programme. Formation Batchwww.astase.com Page 48/90 8) Appel d'autres fichiers Batch LacommandeCALLpermetd'appelerunfichierBatchpartird'unautrefichier batch.Aprsavoirtraitlefichierbatchappel,leprogrammerevientaupremier fichier batch et l'endroit prcis o le fichier batch a t appel. Vous pouvez galement appeler un fichier batch partir d'un autre sans pour autant reveniraufichierbatchdedpart.Ilsuffittoutsimplementd'appelerlefichierbatch par son nom (ou son adresse) cest--dire sans CALL. Appel sans CALL Vouspouvezappelerunfichierbatchpartird'unautreenutilisantsonnom.Le rsultat est que le batch appel est trait, mais il est impossible de revenir au batch desortieprcdemmenttrait.Onpeutenquelquesorteparlerde"liaison unilatrale". Exemple : C:\MesBatch\fichier.bat Appel avec CALL Un batch X appelle un batch A un endroit prcis. CALL a pour rle de contrler que MS-DOS remarque bien le "pointde saut" et reviennedans le batch appelantaprs avoir trait le batch appel.LeBatchAestdoncutiliscommeunsous-programme.Cetteutilisationcomporte unavantagemajeur:ondoitprogrammeruneseulefoislesroutinesbatchetlon peutensuiteles appelerle nombredefoisquel'onveutpartirden'importefichier Batch. Exemple : CALL c:\MesBatch\Routine1.bat Appel dexcutables Windows LacommandeSTARTpermetdelancerdesapplicationsWindowsdepuisvos Batchs.SousNT,vouspouvezmmedfinirlaprioritduprocessuscr.Voil quelques lignes de commande qui pourront vous tre utiles : Start /w bugfix.exe : Lance bugfix.exe ; en attendant que son excution soit termine pour continuer, Start /MAX bugfix.exe : Lance bugfix.exe en plein cran. Formation Batchwww.astase.com Page 49/90 9) Travail avec ERRORLEVEL DenombreusescommandesMS-DOSrevoientunevaleurderetourdiffrentede0 quanduneerreurseproduit.DanslefichierBatch,ellepeut-treconsultel'aide delavariableERRORLEVEL.ERRORLEVEL0signifiequ'aucuneerreurnes'est produite. Si vous programmez en C des extensions pour MS-DOS, vous pouvez renvoyer des valeursl'aidedel'instructionreturn.SivousprogrammezavecDelphivous pourrez utiliser Halt(x), o x dsigne la valeur de retour renvoyer au DOS. Cette valeur peut-tre teste avec IF, mais attention, il y a un lger point surveiller : silavaleurderetourestSUPERIEUREOUEGALEaunumroindiqula commandeestexcute.Parconsquent,sivousavezplusieursERRORLEVEL tester,commenceztoujoursparlaplusgrande,puisprocdezparordre dcroissant. Exemple:lefichierBatchsuivantformateunedisquettedanslelecteurA.Siune erreurseproduitousileprocessusestinterrompuavecCTRL+C,lefichierBatch renvoie un message d'erreur. @echo off format a: if errorlevel 1 goto erreur goto fin :erreur echo. Echo Formatage impossible ! :fin echo on Second exemple. Remarquez que nous contrlons toujours la valeur la plus leve : Echo off Format a: If errorlevel 4 goto erreur4 If errorlevel 2 goto erreur2 Echo Pas d'erreur, formatage effectu Goto fin :erreur4 echo Lecteur ou parametre non valable goto fin :erreur2 echo Formatage interrompu avec CTRL+C goto fin :fin echo on Formation Batchwww.astase.com Page 50/90 Unautreexemple : supposonsun programme bcc32.exequi renvoie 0quand tout sestbienpass,1silefichierdentrenexistepas,2silecontenudufichier comporte une syntaxe errone et 3 si une autre erreur sest produite. Pour grer les erreurs on pourra crire : REM Appel du programme : Bcc32.exe %1 %2 %3 %4 %5 REM Gestion des erreurs : Goto gest%errorlevel% :gest0 echo Aucune erreur goto fin :gest1 echo Le fichier dentree nexiste pas ! goto fin :gest2 echo Erreur dans le fichier dentree goto fin :gest3 echo Erreur inconnue. :fin pause>nul La ligne Goto gest%errorlevel% prendra lexcution la valeur gest0, gest1, gest2, ougest3 et commandera le branchement adquat. NousavonsditqueleifdeWindowsNTacceptaitlesoprateurspluspetit,plus grand,plusgrandougal,etc.Vouspouvezainsitesterrapidementsiuneerreur sest produite ou pas avec : REM Appel du programme : Bcc32.exe %1 %2 %3 %4 %5 REM Gestion des erreurs : IF not %ERRORLEVEL% LES 1 goto erreur echo Aucune erreur goto fin :erreur echo Erreur inconnue. :fin Ainsi, si %ERRORLEVEL% est infrieur 1 (donc est gal zro) on ira erreur. Toutes les commandes DOS ne renvoient pas des valeurs d'erreur. Les commandes concernes n'utilisent que certaines valeurs. Formation Batchwww.astase.com Page 51/90 10) Tches dadministration courantes Cechapitrevousprsentelestchesdadministrationcourantesquevousserez peut-tre amener raliser via MS-DOS. Envoi de messages Il peut tre parfois utile denvoyer un message sur certains PC de votre rseau pour signaler des informations importantes, comme par exemple limminence dune panne rseau ou dune opration de maintenance. Ces messages sont de simples botes de dialogues, comme celle-ci : Les receveurs potentiels doivent : -Avoir activ Windows Messenger sils sont sous Windows NT, -Lancer en arrire plan le programme WINPOPUP.EXE sous Windows 9x. Activation de Windows Messenger Dmarrez litem Outils dadministration du Panneau de Configuration, puis ouvrez Services .Sileservice Affichagedemessages nestpasdmarr,faitesun clic droit dessus puis cliquez sur Dmarrer : Le receveur est prt afficher les messages quil reoit. Envoi de messages Lenvoi de message se fait avec la commande net et le paramtre send . La syntaxe dutilisation est la suivante : Net send Utilisateur Texte Formation Batchwww.astase.com Page 52/90 Utilisateur reprsentesoitlIPdupostedestinataire,soitlenomdelutilisateur destinataire,soit son nom de poste rseau Microsoft, Texte reprsente le message dlivrer. Parexemple,lebatchsuivantprvientlutilisateurduposte192.168.113.2queson PC va bientt tre redmarr : @echo off echo Ce batch previent le redemarrage du poste SMB. echo Continuer ? pause>nul netsend"192.168.113.2""Attention,leredemarrageduposte est imminent. Sauvegardez immediatement votre travail.">nul echo Termine. pause>nul Ce Batch peut tre excut par un autre programme pour prvenir lutilisateur ayant envoy un document imprimer que celui-ci est termin : @echo off cls if "%1"=="" goto SynError REM - Envoyer le message net send "%1" "Votre document est imprime." goto fin :SynError echo Cette application le nom de l'utilisateur ayant lance le travail echo d'impression passe en parametre ! :fin cls echo on Lexemplesuivantutilise uneboucle FORpour dlivrerunmessageunensemble de postes : @echo off echo Pressez un touche pour diffuser les infos de maintenance pause>nul for%%Ain(WEBLAF01S108MS110MS112MS114M)Donetsend %%AMaintenancedugroupeELECTRONIQUEencours,mercide nepasvousconnecteraureseaupendantquelques minutes...>nul cls Formation Batchwww.astase.com Page 53/90 Ledernierexempleillustrelecasouladministrateursystmedoitinformertoutle rseau dune panne systme sur un des serveurs de lentreprise : @echo off echoPressezuntouchepourlancerlebatchdebroadcast critique pause>nul netsend* ProblemesurINTERSHR01,mercideneplus utiliser de ressources sur ce serveur pendant cette heure cls Mappage de lecteurs rseaux Ilestpossibledemonterdesressourcesrseaudistantes(issuesdeserveurs Microsoft)commedisqueslocauxgrcelacommandeNETUSE.Ainsi,par exemple,ledossierpartag\\BACKUPSRV\BACKUP\JUINpourratreassociau lecteur G:\. Celui-ci apparatra comme un priphrique de stockage classique. La syntaxe globale de la commande est la suivante : Net use disque ressource_rseau autres_parametres Utiliseznetuse/ ?pourafficherlalistedesoptionscompltedecette commande. Exemple : le serveur INTERSHR contient un dossier partag LIB quon souhaite monterchaquedmarragecommedisqueH.Onpourracrireunbatchdansce style lanc chaque dmarrage : @echo off cls echo Montage des volumes reseau... net use H: \\INTERSHR\LIB cls Delammemanire,onpourraforcer(avec/yes)lemontageduvolumecach PROFS en tant que G : @echo off cls echo Montage des volumes reseau priv... net use G: \\S208M\PROF$ /yes>nul cls Formation Batchwww.astase.com Page 54/90 Onpeututiliserlebatchsuivantpourmonterdesressourcesurlapremireunit logiquedisponible(*).LalettreseradoncattribueparWindowsenfonctiondela configuration locale au moment de lappel de la commande : @echo off cls echo Montage des volumes en cours net use * \\SYSSRV01\SHARED$ >nul net use * \\SYSSRV02\C$ >nul net use * \\SYSHPTUX\PUBLIC >nul cls Pour supprimer explicitement un lien tabli, utilisez le commutateur DELETE : echo Extinction de lordinateur REM Deconnexion... Net use * /DELETE /YES REM On se deconnecte de toutes les ressources reseau Shutdown t 00 f s REM Extinction immediate du PC Synchronisation de lheure Dansunparcdeplusieursmachines,ilpeuttreintressantdepouvoirmettre automatiquement les clients lheure du serveur pour de multiples raisons. La commande NET TIME permet dafficher ou de synchroniser lheure par rapport un autre poste. Par exemple le Batch suivant, excut chaque dmarrage, permet de rgler lheure locale sur le poste XVHINA : echo Rglage de lheure en cours Net time \\XVHINA /SET /YES >nul Echo Termine. Cls /SETforcelasynchronisation,et/YESvalidetouteconfirmationventuellement requise. Sauvegarde & Dploiement AvecXCopy,utilitairedecopieintgrMS-DOS,vouspouvezcopierdossierset fichiers dans un batch en une seule ligne de code. LeBatchsuivantestunexemplequisauvegardeC:\Travaildans \\SRVBACKUP\. Il cre un fichier log contenant la liste des messages affichs par Xcopy et le place ensuite sur le serveur. Formation Batchwww.astase.com Page 55/90 @echo off if "%username%"=="" goto fin echo Sauvegarde de vos fichiers... Xcopy "C:\Travail" "\\SRVBACKUP\%username%\" /D /S /C /L>> "\\ SRVBACKUP\Log\%username%.log" echo Termine ! :fin XCopyestextrmementricheenoptionsdecopie.TapezXCopy/ ?pourun descriptif de tous les paramtres quil accepte. Dans notre cas, nous utilisons /D pourcopieruniquementlesfichiersmodifis, /S pourcopierrpertoiresetsous rpertoires, /L pourafficherlalistedesfichierscopisetlesenregistrerainsi dans le fichier LOG, et /C pour forcer la copie mme en cas derreur. Ce batch peut tre ensuite lanc : -Soit lextinction ou au dmarrage de lordinateur, -Soit par lutilisateur lui-mme, -Soit par le systme, via la cration dune tche planifie avec Windows ou avec MS-DOS (at). Uneautreutilisationpeuttrelarestaurationdedocumentsdepuisleserveur.Par exemple,leBatchsuivantrestaureledossierC:\DATApartirduserveur.Lanc chaquedmarrage,ilassurequecestbienlaversiondeladministrateurquiest prsente sur les postes clients : @echo off echo Les fichiers sont actuellement restaurs xcopy \\SV32\logon\winfiles c:\data /E /C > nul echo Termine. cls Enfin,vousaurezpeut-treparfoisbesoinde dployer desapplications,c'est--direderaliserdesinstallateursrudimentairespourdesprogrammes.Danscecas, voil quelques outils pour raliser vos installations en batch : -UtilisezXcopypourcopierfichiersetdossiers.Nhsitezpasutiliserle commutateur /V pour vrifier que les fichiers ont bien t copis, -VouspouvezimporterdesfichiersREGcontenantdesvaleursdecls ajouterlabasederegistreWindowsviaenutilisantlacommande regedit/s fichier.reg .Lecommutateur/sassureque limportation se fera silencieusement, sans aucun message ou confirmation demander lutilisateur, -VouspouvezenregistrerdesDLLActiveXdanslabasederegistreavec regsrv32.exe /s fichier.dll , -Vouspouvezredmarrerlordinateurfacilementunefoislescopies effectues avec le programme shutdown sous Windows NT. Formation Batchwww.astase.com Page 56/90 Exemple : @echo off echo Deploiement de IRVIEW en cours... echo. echo Copie des fichiers REM - Copie des fichiers vers %windir% xcopy irviewCore.dll "%windir%" /V /Y /H xcopy irview.exe "%windir%" /V /Y /H xcopy irviewLib.dll "%windir%" /V /Y /H REM - Copie des dossiers vers %windir% xcopy "irdat16" "%WINDIR%" /V /Y /C /S xcopy "irdat32" "%WINDIR%" /V /Y /C /S REM - Enregistrement du serveur ActiveX regsvr32 /s "%WINDIR%\irviewLib.dll" REM - Mise jour de la BDR regedit /s "ir_s1.reg" regedit /s "ir_s2.reg" regedit /s "irv_svc.reg" REM - Redmarrage shutdown -r -t 00 f Dploiement automatique depuis un serveur : il peut tre facile galement de lancer des excutables situs depuis un poste distant : @echo off net use J: \\WLSRV\Autorun\%username% /y >nul cd J: for %%A in (*.exe) do start %%A net use J: /DELETE /y >nul cls Lexempleci-dessusmontecommedisqueJ :laressourcerseausituesur \\WLSRV\Autorun\,excutetouslesfichiersEXEquil contient,puissedconnecte.Onaainsi,silebatchestexcutchaque dmarrage, programme une sorte dautoexec rseau . Lancement planifi de batchs VouspouvezplanifiersousWindowsNTlelancementdeBatchsgrcela commande intgre at. Tapezat/ ?enlignedecommandepouravoirlalistedesoptionsdela commande. Imaginonsunbatchcontrlantlesquotasdecertainsdossiersdevanttreexcut pendant la pause des employs, midi. Son lancement peut tre planifi ainsi : At 12:00 /INTERACTIVE /EVERY:l,ma,me,j,v P:\ad\checkquotas.bat Formation Batchwww.astase.com Page 57/90 Touslesjoursouvrablesdelasemainelebatchseraainsilanc.Poursupprimer toutes les tches prcdemment planifies, entrez at /DELETE. Unautreexemple :vousvousoccupezdunparcinformatiquedontles PCtournent sans interruption. Vous souhaitez les rebooter automatiquement les lundis 5 heure du matin Crationdufichierrestart.batdestinredmarrerlePC,placdansle dossier c:\util : @echo off Net use Z: \\MASTER\LOG\REBOOT$ /y >nul REM Monte la ressource Z Shutdown t 00 r l f >> Z:\%username%_reboot.log REM Redmarre le PC en fermant la session, REM Stocke le rsultat dans _reboot.log Net use Z: /y /DELETE REM Ferme lacces... Cls REM FIN Planification automatique via AT : At 5:00 /EVERY:l c:\util\restart.bat Batchs douverture de session Grce au mcanisme netlogon de Windows NT, vous pouvez excuter un Batch douverturedesessionsurleclient.Celui-cipeutincluretouteslescommandes dadministration que nous venons de dtailler. Par exemple : @echo off echo Ouverture de session... REM Reglage de lheure Net time \\UXSERV\ /set /yes > nul Net use G: \\UXSERV\DATA$ /yes > nul Call \\MAINBB\NETLOGON\Commun.bat REM Monte les volumes rseau If not %username% == xcopy\\UXSERV\logon\Default\%username% c:\Home /E /C REM Copie les fichiers set path=%path%;C:\MinGW\bin;%windir%\hina\bin REM Modifie le PATH Kit de ressource Microsoft Microsoftproposeunkitdadministrationcomprenantdesprogrammesutilisables dansvosbatchpourvousaiderdanslagestiondunparcdemachines.Voir microsoft.com pour plus de dtails. Formation Batchwww.astase.com Page 58/90 Dtails sur certaines fonctionnalits de PowerBatch Lestroisprochainschapitresdtaillentlutilisationdecertainesfonctionsde PowerBatch,lditeurdeBatchquenousdistribuons.Sivousnelepossdezpas vous pouvez les sauter directement. 11) La compilation PowerBatch vous permet de compiler un fichier Batch, cest--dire de le transformer en un excutable binaire Windows (.exe ou .com) grce Bat2Exec. Un excutable prsenteeneffetplusd'avantagesqu'unfichierBatch:vitessed'excutionplus leve, code source "protg", format binaire inaltrable, etc Bat2Execn'estpascompatibleavectouteslescommandesDOSetBatch,par consquent,testezbienlefichiercompilavantdeledistribuerpourvitertoute mauvaise surprise. Par exemple, la commande "CHOICE", n'est pas supporte par le compilateur. Compiler un fichier 1) Crez ou ouvrez un fichier Batch. Dans notre exemple, il contient simplement : @echo off echo Bonjour, pressez une touche pause 2)Choisissezlacommande"Compiler"danslemenu"Fichier",puisnommezle fichier qui va tre cre. La fentre suivante apparat : Formation Batchwww.astase.com Page 59/90 Cliquez sur "Compiler" pour compiler le fichier Batch. Un fichier ".com" sera cr, rsultat du code compil par Bat2exec. Compilation sans erreur Si toutes les commandes ont t supportes, et que Bat2Exec n'a rencontr aucune erreur,PowerBatchafficheuneboitededialogueconfirmantlesuccsdela compilation. Compilation avec erreur SiBat2execrencontredeserreurslorsdelacompilation,illuiseraimpossiblede crer le fichier ".com". Si par exemple, nous introduisons une erreur dans notre code @echo off echo Bonjour, pressez une touche Goto Bonjour (en effet, il y a un "Goto" qui pointe vers un label inexistant) et que nous essayons de compiler le code, nous obtenons ce message d'erreur : Bat2exec va vous montrer l'erreur qu'il a rencontre, dans notre cas, on a : Il ne vous reste plus qu' reprendre votre code pour le corriger. Utilisez la barre d'tat situ sous la zone de texte de PowerBatch qui affiche la ligne encourspourdtecterdovientl'erreurd'aprslen delignetransmispar Bat2exec. Formation Batchwww.astase.com Page 60/90 12) Les bordures L'art de "faire" les bordures dans un fichier Batch est trs apprci des connaisseurs et des novices : quoi de plus esthtique d'encadrer un texte de cette faon : Pour cela, MS-DOS utilise tous les caractres "spciaux", c'est pour cela que dans le chapitre1nous vousavonsconseilld'viterd'utiliserlescaractresaccentus tels que ",," etc En ralit, voil ce qu'il faut entrer dans un Batch pour faire cette bordure : Au lieu d'entrer ces caractres la main, utilisez l'assistant crateur de bordures de PowerBatch (Dans le menu "Outil"). Voici comment se prsente l'assistant son lancement : Formation Batchwww.astase.com Page 61/90 Commevouslevoyez,cetassistantcomporteunesorted'"encadrement"constitu de plusieurs images reprsentant un cadre fictif. Il vousfaudraenfaitcliquersurla casereprsentantlabordurevoulue pourqu'elle apparaisse dans la zone de texte de la fentre. Pourcrerlabordurehaute(1coinhaut/gauche,8traitshorizontaux,et1coin haut/doit), correspondant la ligne : vous cliquerez 1 fois sur la case : 8 fois sur la case : et 1 fois sur la case :

Ensuite, il vous faut aller la ligne. Cliquez sur "Retour chariot" pour crer une nouvelle ligne. Nous devons donc entrer la seconde ligne pour crer une bordure ressemblant : Cettebordureestconstituede:1 ligneverticale, vouscliquerezdonc1foissurla case reprsentant un trait vertical, 8 espaces, vous cliquerez donc 8 fois sur la case "espace", puis 1 trait vertical, vous cliquerez donc 1 fois sur la case reprsentant un trait vertical. Ensuite, allez la ligne pour crer la dernire ligne de la bordure : Formation Batchwww.astase.com Page 62/90 Cettebordureestconstituede:1coinbas/gauche,8traitshorizontaux,uncoin bas/droit : vous utiliserez donc les cases de l'assistant appropries. La zone de texte de l'assistant contient maintenant : Nenousproccuponspaspourl'instantdutexte"Bonjour