brotkasten
Goto Top

Systemvariable über Batch nicht abrufbar!

Guten Morgen zusammen,

ich habe testhalber mehrere Systemvariablen angelegt, die ich in zukünftigen Batches verwenden möchte (Über System -> Erweiterte Systemeinstellungen -> .

Beispiel:
10001 ist der Variablennamen mit dem Wert 127.0.0.1

Wenn ich diese Variable nun im DOS-Fenster mit %10001% eingebe, erscheint mein gewünschter Wert.

Wenn ich allerdings eine Batch-File erstelle mit folgendem Code:

echo %10001%
pause

Erscheint bei mir nur der Hinweis echo 0001.
Gebe ich es mit %% ein, erscheint nur der Variablenname %10001%

Wie kann ich also nun korrekt die Systemvariablen in einer Batch einbauen, sodass ich andere Abfragen etc. sparen kann, um meinen gewünschten Wert abzurufen?

Danke im Voraus.

Mit freundlichen Grüßen.

Content-ID: 330170

Url: https://administrator.de/forum/systemvariable-ueber-batch-nicht-abrufbar-330170.html

Ausgedruckt am: 20.04.2025 um 07:04 Uhr

GrueneSosseMitSpeck
GrueneSosseMitSpeck 22.02.2017 um 11:21:30 Uhr
Goto Top
der Name der Systemvariable muß immer mit einem Buchstaben beginnen, ansonsten läufst du in irgendwelche Windows Altlasten hinein die nicht alle zu 100% dokumentiert sind.
Brotkasten
Brotkasten 22.02.2017 aktualisiert um 12:04:19 Uhr
Goto Top
Guten Morgen,

vielen Dank schon mal für den Hinweis.
Nachdem ich die Variable mit einem Anfangsbuchstaben versehen habe, ruft er meinen gewünschten Wert auf.

Wenn ich nun aber den Wert aufrufen möchte, wie kann ich am geschicktesten die eigentliche Variable abrufen?
Am Anfang gebe ich ja meine Kundennummer ein, um die es geht. Anschließend soll ausgewählt werden, auf welchen PC zugegriffen werden soll.
Daraus resultierend gibt es ja verschiedene IP-Adressen, weshalb das "IF" dann die richtige IP-Adresse laden soll.

@echo off
set /p KDNR=Bitte KDNR eingeben:

IF %KDNR% GTR 10915 (
	goto Start
	)

:Auswahl
set /p Auswahl=Bitte auswaehlen auf welchem Rechner das CMD gestartet werden soll. HPC (h) LPC (l) BPC (b) :
	IF %Auswahl% NEQ h IF %Auswahl% NEQ l IF %Auswahl% NEQ b (
	goto Error1
	)


IF %Auswahl%==h	(
	set /a IP=h%KDNR%
	)
IF %Auswahl%==l (
	set IP=l%KDNR%
	)
IF %Auswahl%==b	(
	set IP=b%KDNR%
	)
echo %IP%
pause

Mit freundlichen Grüßen.
Kraemer
Kraemer 22.02.2017 um 13:34:46 Uhr
Goto Top
Moin,

vorab mal eine Frage: Warum hinterlegst du die Werte als Systemvariable?

Gruß Krämer
Brotkasten
Brotkasten 22.02.2017 um 14:04:57 Uhr
Goto Top
Guten Tag Krämer,

ich will sie als Systemvariable hinterlegen, da diese IP-Adresse in den verschiedensten Batches verwendet wird und bevor ich nun jedesmal (unzuverlässigerweise) eine for-Schleife einbaue, die eine bestimmte Textdatei ausliest, um mein gewünschtes Ergebnis zu bekommen, wollte ich mir den Schritt sparen.

Mit freundlichen Grüßen.
Friemler
Lösung Friemler 22.02.2017 um 18:17:36 Uhr
Goto Top
Hallo Brotkasten,

was Du wahrscheinlich benötigst ist doppeltes Parsing des Variablennamens (siehe Zeilen 27, 31, 35):
@echo off & setlocal

::Testdaten
set "h1234=127.0.0.1"  
set "l1234=127.0.0.2"  
set "b1234=127.0.0.3"  


:Start
set /p "KDNR=Bitte KDNR eingeben: "  
if %KDNR% GTR 10915 goto :Start


:Auswahl
set /p "Auswahl=Bitte auswählen auf welchem Rechner das CMD gestartet werden soll. HPC (h) LPC (l) BPC (b) : "  

for %%k in (H L B) do (
  if /i "%Auswahl%" equ "%%k" goto :%%k  
)

::Fehlermeldung und Rücksprung
echo Ungültige Auswahl & echo.
goto :Auswahl


:H
call set "IP=%%h%KDNR%%%"  
goto :Weiter

:L
call set "IP=%%l%KDNR%%%"  
goto :Weiter

:B
call set "IP=%%b%KDNR%%%"  
goto :Weiter


:Weiter
echo %IP%


::Script-Ende mit Exit Code 0
exit /b 0

Grüße
Friemler
Brotkasten
Brotkasten 22.02.2017 um 20:12:06 Uhr
Goto Top
Guten Abend Friemler,

vielen Dank für deine Hilfe. Ich hatte es anfangs auch mit dem doppelten Parsing versucht, allerdings kam ich nicht darauf, dass man "call" hierfür verwenden muss. Ich habe es immer mit "set IP=%%IP%KDNR%%%" oder ähnliches versucht, weshalb dabei immer nichts rauskam ...

Sollte man für Errormeldungen immer :: verwenden oder was genau hat dies zu bedeuten? Ich kenne es nur mit einem : als Sprungmarke.

Ich wünsche dir noch einen schönen Abend und bedanke mich noch mal herzlich für die Hilfe. face-smile

Mit freundlichen Grüßen!
Friemler
Friemler 22.02.2017 um 22:59:37 Uhr
Goto Top
Hallo Brotkasten,

gern geschehen.

Der doppelte Doppelpunkt am Zeilenanfang kennzeichnet eine komplette Zeile als Kommentar. Finde ich schöner als den eigentlich für Kommentare gedachten REM-Befehl, der allerdings den Vorteil hat, auch mitten in einer Zeile verwendbar zu sein, z.B.
echo Hier lief etwas schief & rem Fehlermeldung ausgeben

Auch Dir einen schönen Abend
Friemler