ledoc | lovers | Nouveau membre | | 44 messages postés |
| Posté le 28-11-2009 à 09:19:56
| Les commandes Batch de Windows//Etherlord Les commandes Batchs de Windows Explorez la puissance de votre système 2003/etherlord - DHS En ces temps incertains, ou la majorité des utilisateurs exploitent des ordinateurs à travers des systèmes graphiques, ils sont nombreux a avoir oublié les commandes de base d'un système opératif tel que le DOS (Dos : Disk Operating System). Le DOS vous autorise plusieurs commandes en lignes, qui si elles on 'look' vieillot et qu'il est nécessaire de les taper (ouch...), peuvent se montrer très puissantes dans la réalisation de tâches répétitives. Il est egallement utile de connaître ces commandes lorsque vous êtes connectés à un système distant à travers le réseau. Vous connaissez probablement tous la commande FORMAT a:\. Mais avez-vous seulement compris l'etendue des possibilités du PIPE ?? (Vous savez, cette barre etrange : ¦). Parmis les autres possibilités du langage Dos, celle-la est certainement la plus impressionante. Mais avant de continuer a disgresser, voyons brievement les commandes communes que vous pouvez utiliser dans un batch. Commandes (Pour obtenir de l'aide sur chaque commande, vous pouvez fournir le paramètre "/?" (sans les guillemets) à la commande (par ex: START /? affiche l'aide de la commande START) ================================================== ============= Citation: ATTRIB : Change les attributs d'un fichier ex : attrib +r+h test.txt La commande précedente va définir les attributs LECTURE SEULE (R:READ ONLY) et FICHIER CACHE (H:HIDDEN) pour le fichier test.txt. Pour supprimer les attributs : attrib -r-h test.txt CLS : Efface l'ecran de la console EXIT : Ferme la session de commande. FOR : Initie une boucle. Voir plus bas pour un example. FIND : Permet de rechercher du texte dans un ou plusieurs fichiers, en memoire, permet de recuperer les infos du bios,etc... GOTO : Branchement du flux du programme vers un label ex : goto Step1 echo Cette ligne n'est jamais affichée :Step1 echo Cette ligne est affichée IF : Permet d'utiliser une condition ex : if exist autoexec.bat echo Existe! La commande précedente affiche le mot "Existe!" si le fichier autoexec.bat est prsent dans le répertoire courant. MORE : Permet de suspendre l'affichage temporairement quand l'affichage depasse le nombre de lignes de l'ecran ex : type help.txt | more MOVE : Déplace un fichier SET : Défini une variable d'environnement ex : set msg="Bienvenue " msg2=%msg%%username% echo msg2 Le batch précedent va définir une premiere variable avec le contenu "Bienvenue ", puis cree une deuxième variable en appondant le nom de l'utilisateur à la première variable, et le résultat final est affiché. SHIFT : Cette commande permet de déplacer un paramètre d'un cran à gauche dans la pile des paramètres transmis au batch: ex : set A0 = %0 set A1 = %1 shift set A2 = %1 La première ligne du batch enregistre le premier paramètre passé au batche dans A0, la deuxième ligne enregistre le deuxième paramètre dans A1, la troisième ligne décale la pile des paramètres (%0 est perdu, %1=%2, %2=%3, etc..). Finallement, le troisième paramètre est stocké dans A2 START : Démarre l'execution d'un programme dans une nouvelle fenêtre. La fenêtre est définissable (plein écran, minimisée, invisible), ainsi que la priorité d'execution. Cette commande permet égallement d'éxecuter un processus et d'attendre la fin du processus pour continuer le batch. TYPE : Affiche un message sur le port de sortie (par defaut, le port de sortie est la console, peut etre redefinie) Comme vous vous en êtes suremnet aprecus, la plupart de ces commandes sont en fait de petits fichiers executables, qui sont lancés quand un fichier batch en fait la requête. Comprenez bien que vous pouvez définir n'importe quel commande ou nom de fichier dans un batch, cette commande ou fichier sera executé. L'utilisation de certaines commandes est décrite plus loin. Symboles pouvant etres utilises : ================================= % - Ce symbol permet l'utilisation de variable à l'intérieur d'un fichier batch. @ - En ajoutant ce caractère au debut d'une commande empêche cette commande de s'afficher a l'écran. ex : @DIR (Execute la commande dir sans afficher c:\>DIR sur l'ecran) > - Ajouter un '>' a la fin d'une commande permet de rediriger la sortie(affichage du résultat) de la commande. Dans le cas d'une redirection sur un fichier, le fichier est ecrasé. ex : @DIR a:\ > test.txt (Va enregistrer le contenu du répertoire a:\ dans le fichier) >> - Ajouter '>>' a la fin d'une commande permet de rediriger la sortie(affichage du résultat) de la commande. Dans le cas d'une redirection sur un fichier, le nouveau contenu est appondu au fichier. ex : @DIR a:\ > test.txt (Va enregistrer le contenu du répertoire a:\ dans le fichier) @DIR c:\ >> test.txt (le contenu du répértoire est ajouté au fichier précédent) NUL - Périphérique NUL. Tout ce qui est envoyé à ce périphérique est détruit. ex : @DIR c:\ /s > NUL (Va envoyer le contenu complet du disque (en utilisant le switch /s) sur le périph NUL. Beaucoup de travail, rien n'est affiché < - Ajouter un '<' a la fin d'une commande permet de passer la partie située à droite du symbole '<' comme paramètre de la première commande. ex : debug < file.txt (Va envoyer les commandes contenues dans le fichier au debugger) | - Envoie la sortie(resultat) d'une commande comme paramètre d'une autre commande: ex : mem /c |find "MOUSE" (Va executer la commande mem /c et envoyer le resultat a FIND.EXE qui va afficher que les lignes contenant le terme 'MOUSE') Batch avancé ============ Maintenant, jouons un peu avec les commandes de bases que nous avons vu précédeament. La boucle FOR: -------------- Code: for %%f in (*.*) do echo Il y as un fichier appelé: %%f La ligne précédente initie une boucle qui va chercher tous les noms de fichiers dans le répértoire courant (*.*). Tous les fichiers trouvés sont affichés. Bien sur, il est possible d'être plus spécifique dans la commande. La ligne suivante va silencieusement copier le contenu du répértoire %windir%\repair sur un floppy: Code: for %f in (%windir%\repair\*.*) do @copy %f a:\ Il est égallement possible de définir des boucles avec un compteur: Code: for /L %i in (1,1,5) do echo compteur: %i Le switch /L spécifie que nous travaillons avec des nombres. La boucle va commencer à 1, utiliser un incrément de 1, et va executer la boucle jusqu'a 5. Il est biens ur possible d'envoyer le résultat dans un fichier: Code: for /L %i in (1,1,5) do echo compteur: %i > result.txt La condition IF : ----------------- La condition IF peut être utilisée pour vérifier si un condition est vraie ou fausse. Cette condition peut traiter des variables, ou des paramètres envoyés au batch: Code: if [%1]==[/?] goto AffichAide goto Continue :AffichAide echo Ceci est l'aide en ligne... :Continue La condition IF peut égallement être utilisée en conjonction avec la variable 'errorlevel', une variable qui contient le resultat du dernier programme executé RunProg.exe if errorlevel 0 goto OK echo Wow! On as un problème! goto End :OK echo Ca roule!!! Execution OK! :End Décalage de paramètres (SHIFT) ------------------------------ Cette commande peut être très utilse quand vous avez plus de 10 paramètres a passer à un fichier batch. Les paramètres sont pris en charge par le fichiers batch sous la forme %0.....%9. %0 contient le nom du fichier batch, Si vous avez plus de 9 paramètres à traiter, vous pouvez utiliser la commande SHIFT. Cette commande va décaler les paramètres vers le bas de 1 argument. A chaque commande SHIFT, %0 disparait et récupère la valeur de %1, %1 récupère la valeure de %2, etc.. Une fois décalé, un argument ne peut pas être recuperé. Fichier batch recursif : ------------------------ C'est dans ces conditions que j'adore les batchs. Il est possible de créer un batch récursif en utilisant les caractères %. Voyons un exemple: On veut vérifier que le contenu du dossier c:\temp est bien copié dans c:\temp2. Si le fichier n'existe pas, alors le batch doit copier le fichier, et ensuite afficher le contenu du fichier copié à l'ecran. echo off %1 %2 for /F "tokens=1 delims= " %%i in ('dir /A-D /B c:\temp\*.*') do if not exist c:\temp2\%%i call %0 goto step1 %%i :step1 COPY c:\temp\%3 c:\temp2\%3 type c:\temp2\%3 echo ----------------------------------------------------------------------- :end L'astuce a comprendre ici c'est : call %0 goto step1 %%i à l'interieur de la commande DO. Nous demandons juste au batch de s'appeller lui-même en fournissant GOTO et STP1 comme arguments (respectivement %1 et %2). Maitnenant vous avez compris a quoi sert la ligne %1 %2 qui appareament ne servait a rien..... On aurait pu le faire d'une facon plus élégante, en définissant sous quelle condition on doit executer la commande: [ Code] echo off if "%1" == "()" goto %2 for /F "tokens=1 delims= " %%i in ('dir /A-D /B c:\temp\*.*') do if not exist c:\temp2\%%i call %0 () step1 %%i :step1 COPY c:\temp\%3 c:\temp2\%3 type c:\temp2\%3 echo ----------------------------------------------------------------------- :end [/code] De cette facon, on peut ajouter plusieurs conditions au démarrage du batch. Créer un fichier EXE en utilisant un batch: ------------------------------------------- Oui. Même la création de fichiers EXE est possible à travers les batchs. Examinons le fichier suivant: @echo off echo n prog.com > file1.txt echo a 0100 mov ah,09 >> file1.txt echo a 0102 mov dx,0109 >> file1.txt echo a 0105 int 21 >> file1.txt echo a 0107 int 20 >> file1.txt echo a 0109 db 'hello world!$ >> file1.txt echo rcx >> file1.txt echo 16 >> file1.txt echo w >> file1.txt echo q >> file1.txt debug < file1.txt del file1.txt prog En premier lieu, on supprime tout affichage a l'écran (echo off). La commande en elle-même n'est pas affichée. Puis on crée un fichier appelé file1.txt, dont la première ligne contiendras 'n prog.com'. C'est une commande destinée au debugger, définissant le nom du fichier a créer. On ajoute ensuite plusieurs lignes au fichier file1.txt qui contient toutes les instructions en assembleur qui doivent êtres compilées par le debugger (oui, debug.exe, un des outils fabuleux que vous êtes assurés de trouver sur toutes les moutures de Windown, est aussi capable de COMPILER de l'assembleur!! je suis sur que vous voyez ce petit executable dos sous un jour nouveau à présent...) Le proramme compilé ne fait qu'afficher la ligne 'hello world!' en utilisant l'interuption 21h. Les dernières lignes incluent les commandes pour le debugger (echo w : ecrit le fichier, echo q : quitte le debugger, etc..) Ensuite on compile notre fichier source (debug < file1.txt), on efface le source et on execute le résultat. Fermer la fenetre a la fin de l'execution d'un batch: ----------------------------------------------------- Vous avez probablement deja rencontre ces fenetres qui restent ouvertes avec un titre tel que "Finnished - xxxx". Au lieu de laisser l'utilisateur fermer la fenetre, la commande suivante placee a la fin du batch auras pour effet de fermer la fenetre: Code: @cls Qand le batch est termine, et que l'ecran de commande reste vide, le systeme ferme la fenetre. Implications de variables dans les commandes: --------------------------------------------- Nous avons vu que le symbole % nous permet d'utiliser une variable comme parametre. Le point interessant ici, c'est que l'on peut egallement l'utiliser comme commande: Code: @%sign%cls Si on defini sign comme etant vide (set sign= ) et que l'on execute le batch, la commande sera executee. Maintenant, si on defini sign comme etant une commande (set sign=REM), la ligne du batch ne sera pas executee. Supprimer une ligne spécifique d'un fichier ASCII: -------------------------------------------------- Le code suivant va transferer le contenu du fichier a travers la commande FIND. Le paramètre /V permet d'afficher toutes les lignes qui ne contiennent pas la chaine "terme". find /V "terme" <anyfile> %temp%.\anyfile.tmp COPY/Y %temp%.\anyfile.tmp anyfile DEL %temp%.\anyfile.tmp Convertir une chaine de caracteres en majuscules: ------------------------------------------------- Voici une facon simple de le faire, sachant que la commande PATH convertit tout en majuscule path> %temp%.\respath.bat path chaine a convertir set variable=%path% call %temp%.\respath.bat del %temp%.\respath.bat Etat de la connection reseau: ----------------------------- Comme pour beaucoup d'astuces, il s'agit souvent de trouver l'executable qui permet de recuperer l'information..... @echo off ipconfig.exe |find "IP Address" >nul if not errorlevel 1 ECHO Connecte if errorlevel 1 ECHO Pas connecte Effacer un fichier avec la commande COPY: ----------------------------------------- He oui, c'est possible, comme quoi il faut se mefier de tout dans un batch.... COPY nul fichier Obtenir la liste de tous les fichiers .bat du HD: ------------------------------------------------- J'imagine que tous le monde connait la commande dir /s, bien sur, mais il y as tellement de manieres plus subtiles d'arriver au resultat : @echo off chkdsk /v | find /i ".bat" > res.txt type res.txt | more del res.txt L'option /v de chkdsk nous permet de voir le nom de chaque fichier de chaque repertoire pendant que le disque est verifie. Cette liste est envoyee a la commande find (pipe), le parametre /i permet d'ignorer les difference entre les majuscules et minuscules. Le parametre '.bat' nous permet de specifier notre critere. Attention, cela ne fonctionne pas sous NTFS. Voila pour l'entree en matiere, j'espere avoir couvert tout ce qui est necessaire pour aller un peu plus loin que l'emploi des commandes basiques du systeme, si vous etes interesses a creuser ce domaine je vous recommande l'etude des virus crees en batch, ils contiennent quelques fines astuces.
-------------------- Bonjour a tous , G'Day All / Désolé pour certain tutorial qui sont en anglais / Et bon Hack! / |
|