einsteinxxl
Goto Top

Variable wird nicht gesetzt.

Ich möchte prüfen, ob einer Varibale schon einen Wert zugewiesen wurde und wenn nicht, diesen setzten.

Ich habe Folgendes Problem. Aus einer INI-Datei lese ich einen Pfad aus und schreibe ihn in die Variable %INSTALLDIR%. Wenn Dann in der INI-Datei kein Pfad angegeben ist, möchte ich einen Standardwert setzen.

// - INI-Datei auslesen
for /f "tokens=2 delims==" %%i in ('findstr /I "INSTALLDIR" settings.ini')  do set INSTALLDIR=%%i  

// - Variable zuweisen wenn nicht vohanden und Ausgabe des Ergebnis
if x%INSTALLDIR%x == xx (
    set INSTALLDIR="c:\Programme\myprog" <----- hier wird die variable irgendwie nicht gesetzt.   
    echo Keine Konfiguration gefunden. Standard wird verwendet. 
    echo INSTALLDIR: %INSTALLDIR% 
    echo.       
) else (
    echo Konfiguration gefunden und wird verwendet.
    echo INSTALLDIR: %INSTALLDIR% 
    echo. 
)

Hat jemand ne Ahnung was ich falsch machen?

Content-Key: 128132

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

Printed on: April 26, 2024 at 08:04 o'clock

Member: Iwan
Iwan Oct 28, 2009 at 13:41:07 (UTC)
Goto Top
hallo,

was machen die ganze x in Zeile 5 denn?
änder die mal ab auf:
if %INSTALLDIR% == "" (
Member: Biber
Biber Oct 28, 2009 at 14:00:42 (UTC)
Goto Top
Moin EinsteinXXL,

willkommen im Forum.

Dein Problem hängt an der optischen Täuschung, dass die eine Befehlszeile "IF () ..ELSE ()..)" rein optisch wie mehrere Zeilen wirkt.

In Wirklichkeit wird die Variable "%INSTALLDIR%" nur ein einziges Mal aufgelöst (das SET in Zeile 6 wird erst ab Zeile 15 wirksam).

Ändere es so:
// - INI-Datei auslesen
for /f "tokens=2 delims==" %%i in ('findstr /I "INSTALLDIR" settings.ini')  do set INSTALLDIR=%%i  

// - Variable zuweisen wenn nicht vohanden und Ausgabe des Ergebnis
if x%INSTALLDIR%x == xx (
    set INSTALLDIR="c:\Programme\myprog" <----- hier wird die variable irgendwie nicht gesetzt.   
    echo Keine Konfiguration gefunden. Standard wird verwendet.  
) else (
    echo Konfiguration gefunden und wird verwendet.
)
   echo INSTALLDIR: %INSTALLDIR% 
   echo.       

...und/oder lies dich ein ins Thema "DelayedExpansion" = verzögerte Variablenauflösung.

Grüße
Biber
Member: bastla
bastla Oct 28, 2009 at 14:27:40 (UTC)
Goto Top
Hallo EinsteinXXL und willkommen im Forum!

Nur kurz zum Thema "Ich möchte prüfen, ob einer Varibale schon ein Wert zugewiesen wurde":
if not defined INSTALLDIR set INSTALLDIR="c:\Programme\myprog"
Grüße
bastla
Member: bastla
bastla Oct 28, 2009 at 14:32:35 (UTC)
Goto Top
@Iwan
Eigentlich ist es egal, wie geprüft wird, ob %INSTALLDIR% genau Garnix enthält - wenn das der Fall ist, wird eben aus "x%INSTALLDIR%x" das abgefragte "xx" (allerdings gäbe es genau für diesen Zweck eine Abfrage per "if defined") ...

Grüße
bastla
Member: EinsteinXXL
EinsteinXXL Nov 19, 2009 at 11:58:51 (UTC)
Goto Top
Danke für eure Antworten. Hab das Problem jetzt mit "if not defined" gelöst.

mfg EinsteinXXL