Jump to content

Umgebungsvariablen gesetzt aber leer?!


Gast Flipshot
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Gast Flipshot
Geschrieben

Ich habe in einer Textdatei einen Servernamen und eine Freigabe drin stehen... "Server|Freigabe". Dazu habe ich folgendes kleine Batch-Script was diese Datei ausliest:

 

For /f "Tokens=1-2 Delims=|" %%i In (C:\Temp\Freigabe.txt") Do If "%%i" = "Server" Set Login=Ja

Set Login

Echo x%Login%x

Pause

 

In der Auflistung wird mir die Umgebungsvariable "Login" als gesetzt mit dem Wert "Yes" angezeigt, lasse ich sie jedoch mit "Echo" ausgeben, so erhalte ich lediglich "xx", dazwischen also nix.

 

Geb ich die Befehlszeilen direkt in der Kommandozeilenaufforderung ein, so funktioniert alles. Die Umgebungsvariable kann ich mir auch wieder ausgeben lassen.

 

Warum funktioniert das über mein Script nicht?!

Geschrieben

Hallo,

 

die Vergleichsoperation ist für mich Hauptverdächtig. Normal wird sie mit == oder EQU durchgeführt.

 

Ob das mit den Anführungszeichen in dieser Form so funktioniert, habe ich noch nicht getestet.

 

Das mit echo x%login%x angezeigt xx deutet darauf hin, die Variable %login% ist leer. Der Setbefehl wurde nicht ausgeführt.

 

Gruß

 

Edgar

Geschrieben

hallo Flipshot,

 

Du hattest nur ein Anführungszeichen " an der falschen Stelle.

 

Das Listing finktioniert.

For /F "Tokens=1,2 Delims=|" %%i In (C:\Temp\Freigabe.txt) Do If %%i==Server Set Login=Ja
Set Login
Echo x%Login%x
Pause

 

ciao

Klaus

Geschrieben

dieser syntaktische Fehler provoziert in cmd.exe keinen Fehler, sondern liefert lediglich für IF kein Ergebnis.

 

"%%i" wird nicht als Variable erkannt, sondern als Zeichenfolge "%%i" genau so wie sie da steht.

Der Vergleich "%%i"=="Server" läuft ins leere, da die Bedingung nicht erfüllt ist.

Der SET Befehl erkennt, dass die Variable LOGIN nicht gesetzt ist und verursacht einen Fehler im cmd-Interpreter der die Batch beendet.

 

ciao

Klaus

Gast Flipshot
Geschrieben

Sorry... trotz mehrmaligem Kontrollieren des Posts hatte ich Fehler übersehen. Manchmal ist ein einfaches Copy & Paste doch besser :-)

 

Das Anführungszeichen am Ende der Pfadangabe habe ich im Batch-Script natürlich nicht drin, ebenso wie ich den If-Vergleich mit "==" im Script richtig habe.

 

Es lag aber tatsächlich an den Anführungszeichen beim Vergleich. Kaum hatte ich diese entfernt hat das Ergebnis gestimmt.

Gast Flipshot
Geschrieben

Ja ja... alles klar! Jetzt habe ich beim Vergleich spasseshalber die Anführungszeichen wieder drum rum gesetzt und auf einmal geht's auch damit!

 

Muss man das verstehen?!

Gast Flipshot
Geschrieben

Na toll... und jetzt funktioniert es mit beiden Varianten mal wieder NICHT! Ich glaub, ich benutz einfach ne andre Script-Sprache :-)

Geschrieben

Nun schicke doch mal deinen Code!

 

Es gibt inm Editor extra eine Funktion für Code einfügen.

 

Wenn ich mir das bisherige so anschaue, hast du dich weder mit if /? beschäftigt und auch nicht in der Hilfe nachgeschaut.

 

Die Batchsprache funktioniert einwandfrei seit vielen Jahren, Probleme treten durch Fehler der Programmierer auf.

 

Ich weiss wovon ich Rede. :)

 

Gruß

 

Edgar

Geschrieben
For /f "Tokens=1-2 Delims=|" %%i In (C:\Temp\Freigabe.txt") Do If "%%i" = "Server" Set Login=Ja

Set Login

Echo x%Login%x

Pause

Wenn ich mir das so anschaue:

 

Was soll das Anführungszeichen vor der schliessenden Klammer? txt")

 

Was sollen die Anführungszeichen bei "%%i" ?

Was sollen die Anführungszeichen bei Was sollen die Anführungszeichen bei "Server"?

Wieso ist da nur ein Gleichheitszeichen in If "%%i" = "Server"

 

Die Operation wäre richtig so formuliert:

If %%i" ==Server"

oder so

If %%i equ Server

Gast Flipshot
Geschrieben

Also bitte schön... das ist mittlerweile mein etwas leicht abgeänderter Code:

 

For /f "Tokens=1-2 Delims=|" %%i In (C:\Temp\Freigabe.txt) Do If "1" == "1" (
If %%i == Server (
	Set Login1=Ja
) Else (
	Set Login1=Nein
)

Set L
Echo x%Login1%x
)

Pause

 

Als Ausgabe erhalte ich bei "Set L" unter anderem eine gesetzte Variable "Login1=Ja". Lediglich bei der Ausgabe mittels "Echo" erhalte ich "xx".

 

 

Dass ich im Ursprungspost zwei kleine Fehler (überflüssiges Anführungszeichen und fehlendes Gleichheitszeichen) übersehen hatte, hatte ich allerdings bereits erwähnt!

Geschrieben

Der Anfang der Blockbildung ist nicht richtig:

Do If "1" == "1" (
Die Klammer gehöt hinter das Do, danach macht man meist einen Zeilenumbruch.

 

Die Vergleichsoperation müsste so aussehen: if 1"==1" ... oder if 1 equ 1 ....

 

Wofür soll das Tokens=1-2 eigentlich gut sein? Verwendet wird nur %%i, %%j sehe ich nicht, oder?

Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...