Seite 1 von 1

Testen auf Existenz / mehrfaches Definieren einer Variable?

Verfasst: 23 Aug 2013, 20:18
von embl-structures
Hallo zusammen,

ich verwende oft generische Unterprogramme, welche in separaten Files stehen ("sub Pfad_Zum_Subfile") und meistens werden in diesen Subs "lokale" Variablen gesetzt. Sobald eine solche Sub mehrfach benutzt wird, bekomme ich das Problem, dass WInst beim zweiten Aufruf einen Fehler generiert, weil die Variable schon existiert. Z.B. sieht mein globales Sub-File fuer die Installation eines MSI-Paketes so aus ("$_msipack" und "$_msiopts" muessen vor dem Aufruf deklariert werden, "$__msicmd" wird komplett innerhalb der Funktion gemanagt):

Code: Alles auswählen

DefVar $__msicmd
Set $__msicmd = "msiexec"

If not (FileExists($_msipack))
  Pause "SORRY, could not find " + $_msipack + ".  Please report this problem to structures-it@embl.de"
  IsFatalError
else
  Set $__msicmd = $__msicmd + " /i" + '"' + $_msipack + '"' +" /passive " + $_msiopts
  WinBatch_MSIInstall
endif

[WinBatch_MSIInstall]
$__msicmd
Bei der Installation eines zweiten MSI-Paketes innerhalb eines OPSI-Paketes gibt es einen Fehler, weil "$__msicmd" bereits deklariert ist.

Dies koennte man verhindern, indem
  • mehrfaches Deklarieren einer Variable von WInst schweigend ignoriert wird
  • man die Existenz einer Variable testen kann (if (isDefined ($__msicmd)) ...)
  • man eine Variable loeschen kann (UnDefVar $__msicmd)
Ich kann in WInst keine dieser drei Funktionalitaeten finden. Hat jemand eine Idee, wie man das Problem der wiederholten Definition einer Variable loesen kann?

Gruss
frank

Re: Testen auf Existenz / mehrfaches Definieren einer Variab

Verfasst: 09 Dez 2013, 16:46
von embl-structures
Mit untenstehendem Konstrukt kann man testen, ob eine Variable undefiniert, definiert aber leer oder mit einem Wert besetzt ist:

Code: Alles auswählen

Defvar $__test
Set    $__test = "HALLO WELT"

DefStringList $list
Set $list = getOutStreamFromSection("DOSInAnIcon_echo")

if ( takeString(0, $list) = "ECHO is on." )
  PAUSE "Variable is defined but empty"
else
  if ( takeString(0, $list) = "$__test" )
    PAUSE "Variable is undefined"
  else
    PAUSE takeString(0, $list) 
  endif
endif

[DOSInAnIcon_echo]
@echo $__test
HTH
frank