J'ai un fichier batch et je veux inclure un fichier externe contenant des variables (disons des variables de configuration). C'est possible?
batch-file
Pablo
la source
la source
Réponses:
Remarque: je suppose que les fichiers batch Windows car la plupart des gens semblent ne pas savoir qu'il existe des différences significatives et appellent tout aveuglément avec du texte gris sur fond noir DOS. Néanmoins, la première variante devrait également fonctionner sous DOS.
Configuration exécutable
Le moyen le plus simple de le faire est de simplement placer les variables dans un fichier batch elles-mêmes, chacune avec sa propre
set
instruction:et dans votre lot principal:
Bien sûr, cela permet également de créer des variables de manière conditionnelle ou en fonction des aspects du système, donc c'est assez polyvalent. Cependant, du code arbitraire peut y être exécuté et s'il y a une erreur de syntaxe, votre lot principal se fermera également. Dans le monde UNIX, cela semble être assez courant, en particulier pour les shells. Et si tu y penses,
autoexec.bat
n'y a rien d'autre.Paires clé / valeur
Une autre façon serait une sorte de
var=value
paires dans le fichier de configuration:Vous pouvez ensuite utiliser l'extrait de code suivant pour les charger:
Cela utilise une astuce similaire à la précédente, à savoir simplement utiliser
set
sur chaque ligne. Les citations sont là pour échapper à des choses comme<
,>
,&
,|
. Cependant, ils se cassent eux-mêmes lorsque des guillemets sont utilisés dans l'entrée. De plus, vous devez toujours faire attention lors du traitement ultérieur des données dans les variables stockées avec de tels caractères.Généralement, échapper automatiquement à une entrée arbitraire pour ne causer aucun mal de tête ou problème dans les fichiers batch me semble assez impossible. Au moins, je n'ai pas encore trouvé le moyen de le faire. Bien sûr, avec la première solution, vous transférez cette responsabilité à celui qui écrit le fichier de configuration.
la source
Si le fichier de configuration externe est également un fichier batch valide, vous pouvez simplement utiliser:
à l'intérieur de votre script. Essayez de créer après a.bat:
et b.bat:
L'exécution de a.bat devrait générer une sortie:
la source
call
, ce qui est synchrone btw), cela indique que "le processus ne peut pas accéder au fichier car il est utilisé" et ne peut pas être appelé.Batch utilise les crochets inférieur et supérieur à comme canaux d'entrée et de sortie.
L'utilisation d'un seul crochet de sortie comme ci-dessus écrasera toutes les informations de ce fichier.
L'utilisation du double crochet droit ajoutera la ligne suivante au fichier.
Cela exécutera les paramètres basés sur les lignes du fichier. Dans ce cas, nous utilisons deux lignes qui seront tapées en utilisant "echo". Le crochet gauche touchant le crochet droit des parenthèses signifie que les informations de ce fichier seront redirigées vers ces lignes.
J'ai compilé un fichier d'exemple en lecture / écriture. Vous trouverez ci-dessous le fichier divisé en sections pour expliquer ce que fait chaque partie.
SRU peut être n'importe quoi dans cet exemple. Nous le configurons en fait pour éviter un crash si vous appuyez trop rapidement sur Entrée.
Maintenant, nous devons écrire les variables dans un fichier.
J'utilise .cdb comme une forme courte pour "Command Database". Vous pouvez utiliser n'importe quelle extension. La section suivante consiste à tester le code à partir de zéro. Nous ne voulons pas utiliser les variables définies qui ont été exécutées au début du fichier, nous voulons en fait qu'elles se chargent À PARTIR du fichier settings.cdb que nous venons d'écrire.
Donc, nous avons juste envoyé les deux premières lignes d'informations que vous avez écrites au début du fichier (que vous avez la possibilité d'ignorer la définition des lignes à vérifier pour vous assurer que cela fonctionne) pour définir les variables d'entrée et d'entrée2.
Cela affiche les informations qui ont été définies lors du transfert de settings.cdb entre parenthèses. En tant que facteur de motivation supplémentaire pour un bon travail, appuyez sur Entrée et définissez les valeurs par défaut que nous avons définies plus tôt comme «1» pour renvoyer un bon message de travail. L'utilisation des tubes de support va dans les deux sens, et est beaucoup plus facile que de régler le truc "POUR". :)
la source
Alors tu dois juste faire ça correctement?:
la source
Production:
$ RunCount = 1
$ RunCount = 2
$ RunCount = 3
La technique décrite ci-dessus peut également être utilisée pour partager des variables entre plusieurs fichiers batch.
Source: http://www.incodesystems.com/products/batchfi1.htm
la source
Un sujet assez ancien mais j'avais la même question il y a quelques jours et j'ai eu une autre idée (peut-être que quelqu'un la trouvera toujours utile)
Par exemple, vous pouvez créer un config.bat avec différents sujets (famille, taille, couleur, animaux) et les appliquer individuellement dans n'importe quel ordre où vous le souhaitez dans vos scripts batch:
Après cela, vous pouvez l'utiliser n'importe où en appelant complètement avec 'call config.bat all' ou en n'appelant que des parties de celui-ci (voir l'exemple ci-dessous) L'idée ici est que parfois est plus pratique lorsque vous avez la possibilité de ne pas tout appeler à une fois que. Certaines variables ne veulent peut-être pas encore être appelées afin que vous puissiez les appeler plus tard.
Exemple test.bat
J'espère que cela aide la façon dont les autres m'aident ici avec leurs réponses.
Une version courte de ce qui précède:
config.bat
test.bat
Bonne journée.
la source
N'oublions pas les bons vieux paramètres. Lorsque vous démarrez votre fichier * .bat ou * .cmd, vous pouvez ajouter jusqu'à neuf paramètres après le nom du fichier de commande:
Exemple de script
Le myscript.bat pourrait être quelque chose comme ceci:
Exemple de sortie
la source
En essayant d'utiliser la méthode avec une configuration excutable, j'ai remarqué que cela peut fonctionner ou ne PAS fonctionner en fonction de l'emplacement de l'appel dans le script:
appeler config.cmd
Je sais que ça n'a aucun sens, mais pour moi c'est un fait. Lorsque "call config.cmd" est situé en haut du script, cela fonctionne, mais si plus loin dans le script, ce n'est pas le cas.
Par ne fonctionne pas, je veux dire que la variable n'est pas définie dans le script appelant.
Très très étrange !!!!
la source