alicudi2000
Goto Top

Batchdatei: SET-Befehl funktioniert in IF ELSE nicht

Guten Tag

In einer CMD-Batchdatei musste ich den Quellcode ändern, weil ich keine Variable im ELSE-Teil definieren konnte.
Einen Fehler im Code sehe ich nicht. Das Problem habe ich auf anderem Weg bereits gelöst.
Dennoch möchte ich wissen, ob jemand eine Erklärung für dieses Phänomen hat. Danke für Eure Antwort.
Vereinfacht geht es um:


@echo off
cls

set var=4

if %var% GEQ 5 (
echo vari ist groesser gleich 5
) else (
set antwort=vari ist kleiner als 5
echo %antwort%
)

pause

Ausgabe ist "ECHO ist ausgeschaltet (OFF)."

Content-Key: 370816

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

Printed on: April 25, 2024 at 09:04 o'clock

Mitglied: 135950
135950 Apr 11, 2018 updated at 16:10:12 (UTC)
Goto Top
Hi.
Das ist kein Phänomen das ist Fakt weil das in den Klammern für die Batch quasi in einer Zeile verarbeitet wird face-smile.
Stichwort ist Delayed Expansion, dann klappts auch in den Klammern mit den Variablen wenn du die mit Ausrufezeichen statt Prozentzeichen einklammerst.
@echo off &setlocal ENABLEDELAYEDEXPANSION
cls
set "var=4"  

if %var% GEQ 5 (
    echo var ist groesser gleich 5
) else (
    set "antwort=var ist kleiner als 5"  
    echo !antwort!
)
pause
Gruß m.
Member: Pjordorf
Pjordorf Apr 11, 2018 at 15:58:24 (UTC)
Goto Top
Hallo,

Zitat von @Alicudi2000:
In einer CMD-Batchdatei musste ich den Quellcode ändern, weil ich keine Variable im ELSE-Teil definieren konnte.
?!?

@echo off
Mach das mal weg.

if %var% GEQ 5 (
Wirklich nur 1 % Zeichen und keine doppelten?

Schon mal ein Delayedexpansion genommen?
http://www.robvanderwoude.com/variableexpansionexercise2.php

Gruß,
Peter
Member: Alicudi2000
Alicudi2000 Apr 11, 2018 at 16:18:22 (UTC)
Goto Top
Danke für Deine rasche Antwort Marathon
Ich nehme an, dass die Batch bei Dir läuft.
Bei mir (Win 7 PRO) will auch Dein Code nicht klappen?
Lese Mal Deinen Link zu Delayed Expansion durch...
Mitglied: 135950
135950 Apr 11, 2018 updated at 16:34:18 (UTC)
Goto Top
Zitat von @Alicudi2000:

Danke für Deine rasche Antwort Marathon
Ich nehme an, dass die Batch bei Dir läuft.
Bei mir (Win 7 PRO) will auch Dein Code nicht klappen?
Funktioniert einwandfrei Win7/WIn10 ist egal das ist schon ewig gleich, du musst etwas nicht richtig angepasst haben oder du hast die Ausrufezeichen nicht beachtet.
Oder wir reden aneinander vorbei??

So wie es sein sollte:
screenshot
Member: Pjordorf
Pjordorf Apr 11, 2018 at 16:32:39 (UTC)
Goto Top
Hallo,

Zitat von @Alicudi2000:
Bei mir (Win 7 PRO) will auch Dein Code nicht klappen?
Dann hast du falsch abgeschrieben. du kannst aber mal
set "antwort=var (%var%) ist kleiner als 5"  
nehmen.
Getested mit Win 7 Pro. face-smile

Gruß,
Peter
Member: Alicudi2000
Alicudi2000 Apr 11, 2018 at 16:57:16 (UTC)
Goto Top
Danke Peter
Nein habe nicht falsch abgeschrieben
Habe Batch als CMD und BAT versucht. Beides geht nicht.
Hab in letzter Zeile endlocal eingesetzt, nützt auch nichts.
Vermutlich stimmt was in der Grundeinstellung nicht.
Verlasse jetzt Arbeitsplatz und gehe nach Hause Essen
Versuche später nochmals..
Danke..
Member: Alicudi2000
Alicudi2000 Apr 11, 2018 at 16:58:06 (UTC)
Goto Top
Danke. Bin sprachlos Marathon.
S. Antwort weiter unten. Versuche später nochmals
Member: Alicudi2000
Alicudi2000 Apr 16, 2018 at 21:50:19 (UTC)
Goto Top
Hallo Peter

Melde mich erst heute wieder. Gestern habe ich den Quellcode auf einem zweiten Rechner mit Win 7 PRO bei meinem Kunden laufen lassen. Dort erhielt ich auch als Meldung ECHO ist ausgeschaltet (OFF). Beide PCs sind in einem Netzwerk.

Genau den selben Code habe ich dann auf USB-Stick geladen und heute zuhause auf meinem Laptop mit WIN 10 HOME laufen lassen.

Hier klappt es!

Ich vermute, dass der setlocal-Befehl beim Kunden nicht ausgeführt werden kann und ich dazu keine Rückmeldung erhalte. Warum weiss ich nicht. Werde mit errorlevel prüfen ob ich 0 oder 1 zurückerhalte.

Melde mich wieder markiere meine Frage als gelöst, wenn ich die Antwort habe.

Danke nochmals Peter und marathon
Mitglied: 135950
135950 Apr 17, 2018 updated at 07:35:01 (UTC)
Goto Top
meinem Kunden laufen lasse
Mit dem gefährlichen Halbwissen hantierst du mit Skripten bei Kunden?? Koppschüttel, armer Kunde ...