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-Key: 225392

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

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

Member: Endoro
Solution Endoro Dec 27, 2013 updated at 11:54:41 (UTC)
Goto Top
Hey,
beim Vergleichen mit poison characters helfen nur Zollzeichen:
if [&&]==[&&] echo true
gruss.
Member: bastla
Solution bastla Dec 27, 2013 updated at 11:54:44 (UTC)
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
Member: Nagus
Nagus Dec 27, 2013 at 11:57:32 (UTC)
Goto Top
Hi Bastla,

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

Gruß
Nagus
Member: Nagus
Nagus Dec 27, 2013 at 11:58:01 (UTC)
Goto Top
Danke Endoro!
Member: pieh-ejdsch
Solution pieh-ejdsch Dec 27, 2013, updated at Feb 18, 2014 at 20:09:01 (UTC)
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
Member: Nagus
Nagus Feb 18, 2014 at 20:09:21 (UTC)
Goto Top
Auch von mir etwas spät: Danke! ;-D