111 votes

Fichier de commandes externes de fichier pour les variables

J'ai un fichier batch et je veux inclure un fichier externe contenant certaines variables (dites variables de configuration). Est-il possible?

153voto

Joey Points 148544

Note: je suis en supposant que Windows fichiers batch comme la plupart des gens semblent ignorer qu'il existe d'importantes différences et seulement aveuglément tout appeler avec texte en gris sur fond noir DOS. Néanmoins, la première variante de travail dans DOS ainsi.

Exécutable de configuration

La façon la plus simple pour ce faire est juste de mettre les variables dans un fichier de commandes elles-mêmes, chacune avec sa propre set déclaration:

set var1=value1
set var2=value2
...

et dans le lot:

call config.cmd

Bien sûr, qui permet également de variables à être créé de manière conditionnelle ou selon les aspects du système, il est assez polyvalent. Toutefois, le code arbitraire peut courir là-bas et si il y a une erreur de syntaxe, votre principale lot d'une sortie de trop. Dans le monde UNIX, cela semble être assez commun, surtout pour les coques. Et si vous pensez à ce sujet, autoexec.bat n'est rien d'autre.

Des paires clé/valeur

Une autre façon serait une sorte de var=value paires dans le fichier de configuration:

var1=value1
var2=value2
...

Vous pouvez ensuite utiliser le code suivant pour les charger:

for /f "delims=" %%x in (config.txt) do (set "%%x")

Ceci utilise une astuce similaire comme avant, à savoir que l'aide d' set sur chaque ligne. Les guillemets sont là pour échapper à des choses comme l' <, >, &, |. Cependant, ils vont se casser quand on utilise les guillemets dans l'entrée. Aussi, vous devez toujours être prudent lors de la poursuite du traitement des données dans les variables stockées avec de tels caractères.

Généralement, automatiquement échapper à l'arbitraire d'entrée de cause pas de maux de tête ou des problèmes dans des fichiers batch semble assez impossible pour moi. Au moins je n'ai pas trouver un moyen de le faire encore. Bien sûr, avec la première solution vous poussez la responsabilité de l'écriture du fichier de configuration.

37voto

chalup Points 4215

Si le fichier de configuration externe est également valable fichier de commandes, vous pouvez utiliser:

call externalconfig.bat

à l'intérieur de votre script. Essayez de créer à la suite d'une.chauve-souris:

@echo off
call b.bat
echo %MYVAR%

et b.chauve-souris:

set MYVAR=test

L'exécution d'un.chauve-souris devrait générer en sortie:

test

2voto

Sev3nClouds Points 11

Lot utilise le moins et de plus de parenthèses, comme l'entrée et la sortie des tuyaux.

>file.ext

En utilisant une seule sortie sur support, comme ci-dessus va écraser toutes les informations contenues dans ce fichier.

>>file.ext

À l'aide de la double crochet droit qui va ajouter la ligne suivante dans le fichier.

(
echo
echo
)<file.ext

Cela permettra d'exécuter les paramètres sur la base des lignes du fichier. Dans ce cas, nous allons utiliser les deux lignes qui sera saisi à l'aide de "l'echo". Le crochet gauche en touchant le droit de la parenthèse la parenthèse signifie que les informations de ce fichier sera acheminée dans ces lignes.

J'ai compilé un exemple uniquement en lecture/écriture de fichier. Ci-dessous le fichier est divisé en sections pour expliquer ce que chaque partie ne.

@echo off
echo TEST R/W
set SRU=0

SRU peut être quelque chose dans cet exemple. Nous sommes en fait le réglage pour éviter un plantage si vous appuyez sur Entrée trop rapide.

set /p SRU=Skip Save? (y): 
if %SRU%==y goto read
set input=1
set input2=2
set /p input=INPUT: 
set /p input2=INPUT2: 

Maintenant, nous devons écrire les variables dans un fichier.

(echo %input%)> settings.cdb
(echo %input2%)>> settings.cdb
pause

J'utilise .cdb comme un court formulaire pour la Commande "Base de données". Vous pouvez utiliser n'importe quelle extension. La section suivante est de tester le code à partir de zéro. Nous ne voulons pas utiliser l'ensemble des variables qui ont été exécutés au début du fichier, en fait, nous voulons à la charge DE l'paramètres.le cdb nous venons d'écrire.

:read
(
set /p input=
set /p input2=
)<settings.cdb

Donc, nous avons juste les canalisations de la première deux lignes d'informations que vous avez écrit au début du fichier (que vous avez la possibilité d'ignorer le réglage de la lignes de vérifier pour s'assurer qu'il fonctionne) pour définir les variables d'entrée et de input2.

echo %input%
echo %input2%
pause
if %input%==1 goto newecho
pause
exit

:newecho
echo If you can see this, good job!
pause
exit

Cela affiche les informations qui ont été définis lors de paramètres.la cdb a été acheminée dans la parenthèse. Comme un supplément de bien-emploi de motivation, en appuyant sur entrée et réglage des valeurs par défaut, qui nous l'avons défini plus haut comme "1" sera de retour un bon travail de message. En utilisant le support de tuyaux va dans les deux sens, et il est beaucoup plus facile que de définir la "POUR les" choses". :)

1voto

THEfixer Points 1

Si vous avez juste à faire de ce droit?:

@echo off
echo text shizzle
echo.
echo pause^>nul (press enter)
pause>nul

REM writing to file
(
echo XD
echo LOL
)>settings.cdb
cls

REM setting the variables out of the file
(
set /p input=
set /p input2=
)<settings.cdb
cls

REM echo'ing the variables
echo variables:
echo %input%
echo %input2%
pause>nul

if %input%==XD goto newecho
DEL settings.cdb
exit

:newecho
cls
echo If you can see this, good job!
DEL settings.cdb
pause>nul
exit

-3voto

Ciove Points 56

N'oublions pas le bon vieux paramètres. Lors du démarrage de votre *.chauve-souris ou *.cmd fichier, vous pouvez ajouter jusqu'à neuf paramètres après la commande de nom de fichier:

call myscript.bat \\path\to\my\file.ext type
call myscript.bat \\path\to\my\file.ext "Del /F"

Exemple de script

Le myscript.chauve-souris pourrait être quelque chose comme ceci:

@Echo Off
Echo The path of this scriptfile %~0
Echo The name of this scriptfile %~n0
Echo The extension of this scriptfile %~x0
Echo.
If "%~2"=="" (
   Echo Parameter missing, quitting.
   GoTo :EOF
)
If Not Exist "%~1" (
   Echo File does not exist, quitting.
   GoTo :EOF
)
Echo Going to %~2 this file: %~1
%~2 "%~1"
If %errorlevel%  NEQ 0 (
   Echo Failed to %~2 the %~1.
)
@Echo On

Exemple de sortie

c:\>c:\bats\myscript.bat \\server\path\x.txt type
The path of this scriptfile c:\bats\myscript.bat
The name of this scriptfile myscript
The extension of this scriptfile .bat

Going to type this file: \\server\path\x.txt
This is the content of the file:
Some alphabets: ABCDEFG abcdefg
Some numbers: 1234567890

c:\>c:\bats\myscript.bat \\server\path\x.txt "del /f "
The path of this scriptfile c:\bats\myscript.bat
The name of this scriptfile myscript
The extension of this scriptfile .bat

Going to del /f  this file: \\server\path\x.txt

c:\>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X