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-Key: 330170

Url: https://administrator.de/contentid/330170

Printed on: April 19, 2024 at 21:04 o'clock

Member: GrueneSosseMitSpeck
GrueneSosseMitSpeck Feb 22, 2017 at 10:21:30 (UTC)
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.
Member: Brotkasten
Brotkasten Feb 22, 2017 updated at 11:04:19 (UTC)
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.
Member: Kraemer
Kraemer Feb 22, 2017 at 12:34:46 (UTC)
Goto Top
Moin,

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

Gruß Krämer
Member: Brotkasten
Brotkasten Feb 22, 2017 at 13:04:57 (UTC)
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.
Member: Friemler
Solution Friemler Feb 22, 2017 at 17:17:36 (UTC)
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
Member: Brotkasten
Brotkasten Feb 22, 2017 at 19:12:06 (UTC)
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!
Member: Friemler
Friemler Feb 22, 2017 at 21:59:37 (UTC)
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