Frage Batch-Datei enthält eine externe Datei für Variablen


Ich habe eine Batchdatei und möchte eine externe Datei mit einigen Variablen (zB Konfigurationsvariablen) einbinden. Ist es möglich?


76
2018-05-04 08:41


Ursprung


Antworten:


Hinweis: Ich gehe von Windows-Batch-Dateien aus, da die meisten Leute anscheinend nicht wissen, dass es signifikante Unterschiede gibt, und einfach blind alles mit grauem Text auf schwarzem Hintergrund DOS aufrufen. Trotzdem sollte die erste Variante auch in DOS funktionieren.

Ausführbare Konfiguration

Der einfachste Weg, dies zu tun, besteht darin, die Variablen einfach selbst in eine Batch-Datei zu schreiben set Erklärung:

set var1=value1
set var2=value2
...

und in deiner Hauptgruppe:

call config.cmd

Natürlich können Variablen auch bedingt oder abhängig von Systemaspekten erstellt werden. Dort kann jedoch beliebiger Code ausgeführt werden. Wenn ein Syntaxfehler vorliegt, wird der Haupt-Batch ebenfalls beendet. In der UNIX-Welt scheint dies ziemlich üblich zu sein, besonders für Shells. Und wenn du darüber nachdenkst, autoexec.bat ist nichts anderes.

Schlüssel / Wert-Paare

Ein anderer Weg wäre eine Art von var=value Paare in der Konfigurationsdatei:

var1=value1
var2=value2
...

Sie können dann das folgende Snippet verwenden, um sie zu laden:

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

Dies verwendet einen ähnlichen Trick wie zuvor, nämlich nur zu verwenden set auf jeder Linie. Die Zitate sind da um Dingen wie zu entkommen <, >, &, |. Sie werden jedoch selbst brechen, wenn in der Eingabe Zitate verwendet werden. Außerdem müssen Sie bei der Weiterverarbeitung von Daten in Variablen, die mit solchen Zeichen gespeichert sind, immer vorsichtig sein.

Im Allgemeinen scheint mir das automatische Entweichen von willkürlichen Eingaben, die keine Kopfschmerzen oder Probleme in Batch-Dateien verursachen, ziemlich unmöglich zu sein. Zumindest habe ich noch keinen Weg gefunden, dies zu tun. Bei der ersten Lösung schieben Sie diese Verantwortung natürlich auf denjenigen, der die Konfigurationsdatei schreibt.


103
2018-05-04 08:47



Wenn die externe Konfigurationsdatei auch eine gültige Batchdatei ist, können Sie einfach Folgendes verwenden:

call externalconfig.bat

in deinem Skript. Versuchen Sie, folgende a.bat zu erstellen:

@echo off
call b.bat
echo %MYVAR%

und b.bat:

set MYVAR=test

Die Ausführung von a.bat sollte eine Ausgabe erzeugen:

test

29
2018-05-04 08:48



Batch verwendet die Klammern "Kleiner als" und "Kleiner als" als Eingabe- und Ausgabepipel.

>file.ext

Wenn Sie nur eine Ausgabe-Klammer wie oben verwenden, werden alle Informationen in dieser Datei überschrieben.

>>file.ext

Mit der doppelten rechten Klammer wird die nächste Zeile zur Datei hinzugefügt.

(
echo
echo
)<file.ext

Dies führt die Parameter basierend auf den Zeilen der Datei aus. In diesem Fall verwenden wir zwei Zeilen, die mit "echo" getippt werden. Wenn die linke Klammer die rechte Klammerklammer berührt, werden die Informationen aus dieser Datei in diese Zeilen geleitet.

Ich habe eine Beispiel-Nur-Lese / Schreib-Datei kompiliert. Unten ist die Datei in Abschnitte unterteilt, um zu erklären, was jeder Teil tut.

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

SRU kann in diesem Beispiel alles sein. Wir stellen es so ein, dass ein Absturz verhindert wird, wenn Sie die Eingabetaste zu schnell drücken.

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: 

Jetzt müssen wir die Variablen in eine Datei schreiben.

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

Ich verwende .cdb als Kurzform für "Command Database". Sie können eine beliebige Erweiterung verwenden. Im nächsten Abschnitt wird der Code von Grund auf neu getestet. Wir wollen nicht die set-Variablen verwenden, die am Anfang der Datei ausgeführt wurden, sondern wollen, dass sie FROM aus der settings.cdb laden, die wir gerade geschrieben haben.

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

Wir haben also die ersten beiden Zeilen von Informationen, die Sie am Anfang der Datei geschrieben haben (die Sie übersprungen haben, indem Sie die zu überprüfenden Zeilen überspringen, um sicherzustellen, dass es funktioniert), um die Variablen von Input und Input2 zu setzen.

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

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

Dadurch werden die Informationen angezeigt, die festgelegt wurden, während die Datei "settings.cdb" in die Klammern eingeschlossen wurde. Als zusätzlichen Motivationsfaktor wird durch Drücken der Eingabetaste und Einstellen der Standardwerte, die wir zuvor als "1" festgelegt haben, eine gute Jobmeldung ausgegeben. Die Verwendung der Halterungsrohre geht in beide Richtungen und ist viel einfacher als die Einstellung des "FOR" Materials. :)


2
2017-07-23 20:29



Also musst du das nur richtig machen ?:

@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

1
2017-09-27 16:04



:: savevars.bat
:: Use $ to prefix any important variable to save it for future runs.

@ECHO OFF
SETLOCAL

REM Load variables
IF EXIST config.txt FOR /F "delims=" %%A IN (config.txt) DO SET "%%A"

REM Change variables
IF NOT DEFINED $RunCount (
    SET $RunCount=1
) ELSE SET /A $RunCount+=1

REM Display variables
SET $

REM Save variables
SET $>config.txt

ENDLOCAL
PAUSE
EXIT /B

Ausgabe:

$ RunCount = 1

$ RunCount = 2

$ RunCount = 3

Die oben beschriebene Technik kann auch verwendet werden, um Variablen zwischen mehreren Stapeldateien zu teilen.

Quelle: http://www.incodesystems.com/products/batchfi1.htm


0
2017-11-25 05:26



Vergessen wir nicht die guten alten Parameter. Wenn Sie Ihre * .bat- oder * .cmd-Datei starten, können Sie nach dem Befehlsdateinamen bis zu neun Parameter hinzufügen:

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

Beispielskript

Die myscript.bat könnte etwa so aussehen:

@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

Beispielausgabe

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:\>

-1
2018-04-27 12:11



Beim Versuch, die Methode mit der ausführbaren Konfiguration zu verwenden Ich habe festgestellt, dass es funktioniert oder möglicherweise nicht funktioniert abhängig davon, wo sich das Skript befindet:

Rufen Sie config.cmd auf

Ich weiß, es macht keinen Sinn, aber für mich ist es eine Tatsache. Wenn "call config.cmd" an der Spitze der befindet Skript, es funktioniert, aber wenn weiter im Skript nicht.

By funktioniert nicht, ich meine die Variablen sind nicht auf das aufrufende Skript eingestellt.

Sehr sehr seltsam !!!!


-2
2018-05-25 23:49