Jump to content
Sign in to follow this  
Guest Flipshot

Umgebungsvariablen gesetzt aber leer?!

Recommended Posts

Guest Flipshot

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?!

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

ja, dass sind die möglichen Kombinationen der IF-Abfrage.

 

doch sein Problem war Syntaktisch ..... in (C:\Temp\Freigabe.txt")

und die zu vergleichende Variable %%i war auch in Anführungszeichen. Das kann nicht gehen.

 

ciao

Klaus

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Guest Flipshot

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.

Share this post


Link to post
Share on other sites
Guest Flipshot

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?!

Share this post


Link to post
Share on other sites
Guest Flipshot

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
Guest Flipshot

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!

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...