Les fichiers batch prennent en charge une syntaxe de création de macro. Vous pouvez simplement déclarer les macros comme des variables, et leur passer des arguments comme des fonctions.
Les macros sont un peu difficiles à écrire, mais elles peuvent être plus puissantes, plus rapides et plus efficaces que les systèmes d'information. DOSKEY
basé sur des macros.
Vos trois exemples peuvent être réalisés avec des macros, mais la syntaxe sera différente sous Windows.
Pour les macros persistantes, vous pouvez créer un fichier MACROS.cmd avec des macros, et l'appeler dans votre script ou l'ajouter à la clé de registre AutoRun (comme @user29888 l'a dit).
Comment faire : Créer des macros pour le fichier Batch
Une macro vous permet d'intégrer des blocs de code dans une variable. Comme l'appel d'une sous-routine ou d'une fonction, cela permet de réutiliser le même bloc de code plusieurs fois, à la différence qu'en plaçant le code dans une variable, les performances seront beaucoup plus rapides.
Il s'agit d'une technique avancée mais qui peut être très utile dans les scripts qui comprennent de grands blocs de code ou des commandes en boucle où les performances des autres méthodes sont trop lentes.
Une macro qui exécute exit /b
set _ex=exit /b
Vous pouvez alors quitter une sous-routine avec :
%_ex%
Une macro qui répertorie tous les fichiers .XLS d'un dossier :
Set _macro=Dir c:\demo\*.xls
Nous pouvons maintenant exécuter la macro comme ceci : %_macro%
Une macro pour autoriser les commentaires dans les blocs de code entre crochets [source] :
Set "[=rem/||(" & set "]=)"
For %%G in (first second) do (
Echo first not commented line of the %%G execution
%[%
this is a multi line
comment
%]%
Echo second not commented line of the %%G execution
)
Jusqu'ici, c'est comme la commande DOSKEY, mais pour rendre cette commande plus puissante, vous voudrez passer des arguments à la macro, dans l'exemple ci-dessus, vous voudrez peut-être passer le nom du dossier à lister.
Le passage d'arguments à une macro n'est pas particulièrement facile, la meilleure méthode (découverte par Jeb) est de placer une commande For /L dans la macro, configurée pour exécuter 2 étapes à chaque fois que la macro est exécutée :
Dans la première étape, les arguments sont stockés dans une variable (argv)
Dans la deuxième étape, le corps principal de la macro s'exécute et peut (facultativement) lire la variable
La structure de base de la définition de la macro :
Set _macro=For /l %%n in (1 1 2) do if %%n==2 (Echo Main MACRO goes here.) else setlocal enableDelayedExpansion ^& Set argv=,
%_macro% arg1 arg2
:: The macro will expand to:
:: for /l %%n in (1 1 2) do if %%n==2 (Echo Main MACRO goes here.) else setlocal enableDelayedExpansion & Set argv=, arg1 arg2
:: which is equivalent to:
:: setlocal enableDelayedExpansion
:: Set argv= arg1 arg2
:: Echo Main MACRO goes here.
Exemples :
@echo off
cls
setlocal DisableDelayedExpansion
set LF=^
::Above 2 blank lines are required - do not remove
set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"
set _macrodemo=for /L %%n in (1 1 2) do if %%n==2 (%\n%
for /F "tokens=1 delims=, " %%G in ("!argv!") do (%\n%
echo _argument1=%%G %\n%
set "_argument1=!%%~G!"%\n%
dir !_argument1!\*.xls%\n%
) %\n%
) ELSE setlocal enableDelayedExpansion ^& set argv=,
set "_testfolder=c:\demo"
%_macrodemo% _testfolder
Dans une macro où plus d'un argument doit être passé, ceux-ci deviendront les jetons 2,3,4... dans la commande FOR / F.
Une bibliothèque de macros peut être définie en exécutant un seul fichier batch MACROS.CMD, ce qui permet d'utiliser les macros de la bibliothèque dans plusieurs fichiers batch.
Source : https://ss64.com/nt/syntax-macros.html