nagus
Goto Top

Eckige Klammern in Scripten

Hi und frohe Weihnachten!

Nach längerer Abstinenz habe ich mal wieder eine Frage (ich muss arbeiten ;-D)

Bei der Analyse eines Scriptes bin ich über folgendes gestolpert:

IF [%UMGEB%]== GOTO ERROR_SCRIPT

was auch wunderbar funktioniert. Bisher kannte ich nur die Variante

IF "%UMGEB%"=="" GOTO ERROR_SCRIPT  

Generell lassen sich die ja nicht als "Ersatz" für "" nutzen, ein Test mit

SET [TEST=blablabla]
hat im Gegensatz zu

SET "TEST=blablabla"  

nicht funktioniert.

Bisher kannte ich diese Klammern nur als Platzhalter in Beschreibungen aber nicht als nutzbare Parameter in einem Script. Da ich nun verwirrt bin, wer kann mich erhellen??

Danke schon mal voraus ...
Nagus

Content-ID: 225392

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

Ausgedruckt am: 21.11.2024 um 23:11 Uhr

Endoro
Lösung Endoro 27.12.2013 aktualisiert um 12:54:41 Uhr
Goto Top
Hey,
beim Vergleichen mit poison characters helfen nur Zollzeichen:
if [&&]==[&&] echo true
gruss.
bastla
Lösung bastla 27.12.2013 aktualisiert um 12:54:44 Uhr
Goto Top
Hallo Nagus!

Zumeist wird eine derartige Schreibweise für die Prüfung von Aufrufparametern (%1, %2, etc) verwendet - in Deinem konkreten Beispiel würde ich eher
if not defined UMGEB goto ERROR_SCRIPT
verwenden ...

... ansonsten kannst Du allerdings die eckigen Klammern durch (fast) beliebige andere Zeichen ersezten - funktionieren würde also etwa auch:
if -%UMGEB%+==-+ goto ERROR_SCRIPT
if #%UMGEB%#==## goto ERROR_SCRIPT
if _%UMGEB%_==__ goto ERROR_SCRIPT
REM ...
- diese zusätzlichen Zeichen sorgen einfach nur dafür, dass sich auf keiner Seite des Vergleichs mit == "nichts" befindet ...

Grüße
bastla
Nagus
Nagus 27.12.2013 um 12:57:32 Uhr
Goto Top
Hi Bastla,

Danke! Wie immer schneller als der Schall und vollständig!

Gruß
Nagus
Nagus
Nagus 27.12.2013 um 12:58:01 Uhr
Goto Top
Danke Endoro!
pieh-ejdsch
Lösung pieh-ejdsch 27.12.2013, aktualisiert am 18.02.2014 um 21:09:01 Uhr
Goto Top
Moin Nagus,

Der Vergleich ist WAHR, WENN die Variable Umgeb nicht gesetzt ist - also leer.
IF [%UMGEB%]== GOTO ERROR_SCRIPT
 rem ergibt die Zeile im Klartext
IF == GOTO ERROR_SCRIPT
Der Inhalt der Variable darf keine Sonderzeichen enthalten.
Im Gegensatz dazu - den selben Effekt erreichst Du mit Überprüfung der Definition von Variablen der Inhalt ist egall.
IF not DEFINED Umgeb goto ERROR_SCRIPT
Wenn die Variable auf nur gültigen Inhalt geprüft werden sollte also auch keine Leerzeichen oder TAB wurde nur ein Zeichen und keine Umschliessenden verwendet.
set "Umgeb= "
if %umgeb%.==. goto Error_script
 rem wird Aufgelöst zu
if .==. goto Error_script

Die eckigen Klammern werden als optionale Angaben [nutzbare Parameter] für Scripthilfen verwendet.

Wenn ein Leerzeichen oder andere SonderZeichen in der Variable erwartet werden, dann werden die Anführungszeichen verwendet um die Befehlszeile während der Ausführung stabil zu halten. Zeichenfolge1 sowie Zeichenfolge2 werden als maskierte Werte innerhalb der Anführungszeichen gesehen und nicht als Befehlsteile verwendet.
set "Var=Hallo Echo"
if "%Var%"=="" goto Error_Script

[OT]
...oh etwas spät:
[/OT]

GrußPhil
Nagus
Nagus 18.02.2014 um 21:09:21 Uhr
Goto Top
Auch von mir etwas spät: Danke! ;-D