Lade...
 

Setzen von Umgebungsvariablen

Setzen von Umgebungsvariablen

Die folgenden Hinweise sind nicht spezifisch für ClassiX®, sondern gelten grundsätzlich in einer Windows-Umgebung. Allerdings werden Beispiele aus dem ClassiX®-Umfeld verwendet, um die Anwendung zu demonstrieren. Alle folgenden Befehle sind in der Windows-Kommandozeile oder in Batch-Files anzuwenden.

Allgemeine Hilfe zum temporären Setzen und Formatieren von Umgebungsvariablen kann man in der Command-Shell (cmd.exe) durch

help set

bekommen. Mit dem Befehl set gesetzte Umgebungsvariablen gehen spätestens beim Neustart des Computers verloren.

Die ständigen Umgebungsvariablen in Ihrem System können durch den Befehl setx auf der Kommandozeile gesetzt oder aber ohne die Kommandozeile verwaltet werden unter:

Start → Systemsteuerung → System → Erweitert → Umgebungsvariablen

Umgebunsgvariablen als Dateinamen

Wenn Umgebunsgvariablen als Bestandteil von Dateinamen verwendet werden sollen müssen bestimmte Vorsichtsmaßnahmen getroffen werden. Z.B. müssen Leerzeichen besonders behandelt werden. Häufig sollen konfigurierbare Dateinamen (z.B. zum Logging) auch einen Timestamp enthalten. Für diese Fälle sind hier Tipps beschrieben.

Leerzeichen

Dateinamen dürfen grundsätzlich Leerzeichen u.ä. enthalten. Die Verarbeitung muss aber erkennen können, wo ein Dateiname oder ein Verzeichnispfad aufhört. Daher sollten Dateinamen und Pfade, die in Umgebungsvariablen gesetzt werden und Leerzeichen enthalten können, immer in Anführungsstrichen angegeben werden. Die Anführungsstriche können entweder um den gesamten Pfad, oder nur um Teilpfade gesetzt werden. Z.B.:

SET CX_EDITOR="c:\program files\..." SET CX_EDITOR=c:\"program files"\...

Abfragen von gesetzten Umgebungsvariablen

Es gibt zwei Methoden, um abzufragen, ob eine Umgebungsvariable gesetzt ist und falls nicht, einen bestimmten Wert zu setzen:

IF -%CX_BIN%- == -- SET CX_BIN=y:\classix\bin\4.5

Statt der Minuszeichen werden manchmal auch Anführungszeichen verwendet. Diese Methode beruht darauf, dass im Falle des nicht gesetzt seins die Variabel durch einen Leerstring ersetzt wird und dadurch der Vergleich wahr wird.

Allerdings hat diese Methode den Nachteil, dass der Inhalt der Variablen keine Leerzeichen enthalten darf. Mit Leerzeichen würde ein ungültiger Befehl entstehen. Deswegen ist folgende Methode vorzuziehen:

IF NOT DEFINED CX_BIN SET CX_BIN=y:\classix\bin\4.5

Zeit/Datumsangaben

Es gibt zwei spezielle Umgebungsvariablen für Zeit und Datum: click="javascript:toggle_dynamic_var(" time="">No value assigned (Format: hh:mm:ss,ms) und click="javascript:toggle_dynamic_var(">No value assigned (dd.mm.yy). Mit diesen kann einfach ein Timestamp erzeugt oder ausgegeben werden.

Wenn allerdings Dateien mit einem Timestamp erzeugt werden sollen muss das Format angepasst werden, da Dateien kein : oder ,  enthalten dürfen. Der folgende Befehl funktioniert also nicht:

SET CX_LOGFILE=%CX_ROOTDIR%\system\cx_log_No value assigned.log

da das Ergebnis wäre:

y:\classix\clientA\system\cx_log_11:32:56,02

und damit kein gültiger Dateiname.

Als Lösung können folgende Befehle verwendet werden:

# Der Befehl %VAR:~0,-x% liefert von der Variablen VAR alles bis auf die letzten x Zeichen, in diesem Fall wird ,ms abgeschnitten SET CX_LOGFILE=%TIME:~0,-3% # %VAR:str1=str2% ersetzt in der Ausgabe der Variablen VAR str1 durch str2, in diesem Fall : durch _. Wird str2 weggelassen verschwindet str1 SET CX_LOGFILE=%CX_ROOTDIR%\system\cx_log_%CX_LOGFILE::=_%.log

 

Verzögerte Auswertung (Delayed expansion)

Grundsätzlich werden in Batch-Dateien Umgebungsvariablen vor dem Ausführen einer Zeile ausgewertet und ersetzt. IF und FOR Befehle werden inklusive der zugehörigen Codeblöcke als eine Zeile interpretiert und Variablen darin vor der Ausführung ersetzt (also mit dem Wert, den die Variable vor dem FOR/IF-Befehl hat). Der folgende Code funktioniert daher nicht wie gewollt:

@echo off set VAR=before if "%VAR%" == "before" ( set VAR=after if "%VAR%" == "after" @echo If you see this, it worked ) echo %VAR% gibt aus: after

Beheben läßt sich dies durch die verzögerte Auswertung von Umgebungsvariablen (Delayed Expansion). Wird diese eingeschaltet (per default ist sie aus) können Variablen mit ! statt % expandiert werden:

@echo off setlocal ENABLEDELAYEDEXPANSION set VAR=before if "%VAR%" == "before" ( set VAR=after if "!VAR!" == "after" @echo If you see this, it worked ) echo %VAR% gibt aus: If you see this, it worked after

Delyed expansion kann auf drei verschiedene Arten eingeschaltet werden:

  1. Durch einen Registry-Eintrag in HKEY_CURRENT_USER oder HKEY_LOCAL_MACHINE:
    [Software\Microsoft\Command Processor]"DelayedExpansion"=dword:00000001
  2. Durch den Befehl "setlocal ENABLEDELAYEDEXPANSION" innerhalb des Batch-Files (wie oben im Beispiel)
  3. Durch Aufruf der Command-Shell cmd.exe mit dem Parameter /V