Gast Flipshot Geschrieben 9. Februar 2006 Melden Geschrieben 9. Februar 2006 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?! Zitieren
lefg 276 Geschrieben 9. Februar 2006 Melden Geschrieben 9. Februar 2006 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 Zitieren
klaus_b 10 Geschrieben 9. Februar 2006 Melden Geschrieben 9. Februar 2006 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 Zitieren
lefg 276 Geschrieben 9. Februar 2006 Melden Geschrieben 9. Februar 2006 if %%i"==Servername" oder if /i %%i"==Servername" if %%i equ Servername Zitieren
klaus_b 10 Geschrieben 9. Februar 2006 Melden Geschrieben 9. Februar 2006 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 Zitieren
lefg 276 Geschrieben 9. Februar 2006 Melden Geschrieben 9. Februar 2006 Es wundert mich ein wenig, das nicht von Fehlermeldungen berichtet wurde. Zitieren
klaus_b 10 Geschrieben 10. Februar 2006 Melden Geschrieben 10. Februar 2006 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 Zitieren
Gast Flipshot Geschrieben 10. Februar 2006 Melden Geschrieben 10. Februar 2006 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. Zitieren
Gast Flipshot Geschrieben 10. Februar 2006 Melden Geschrieben 10. Februar 2006 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?! Zitieren
Gast Flipshot Geschrieben 10. Februar 2006 Melden Geschrieben 10. Februar 2006 Na toll... und jetzt funktioniert es mit beiden Varianten mal wieder NICHT! Ich glaub, ich benutz einfach ne andre Script-Sprache :-) Zitieren
lefg 276 Geschrieben 10. Februar 2006 Melden Geschrieben 10. Februar 2006 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 Zitieren
lefg 276 Geschrieben 10. Februar 2006 Melden Geschrieben 10. Februar 2006 set var=Server if %var%"==Server" echo %var% if /i %var%"==server" echo %var% if %var% equ Server echo %var% Zitieren
lefg 276 Geschrieben 10. Februar 2006 Melden Geschrieben 10. Februar 2006 For /f "Tokens=1-2 Delims=|" %%i In (C:\Temp\Freigabe.txt") Do If "%%i" = "Server" Set Login=JaSet 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 Zitieren
Gast Flipshot Geschrieben 10. Februar 2006 Melden Geschrieben 10. Februar 2006 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! Zitieren
lefg 276 Geschrieben 10. Februar 2006 Melden Geschrieben 10. Februar 2006 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? Zitieren
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.