• Hallo Besucher!

    Du bist neu im Forum? Dann registriere dich hier, um Diskussionen beizutreten oder eigene Themen zu erstellen. Für die Registrierung ist es erforderlich, dass du einen Spielaccount bei Die Stämme hast.

    Andernfalls kannst du dich hier direkt einloggen.

    Falls du dein Passwort vergessen hast, kannst du hier ein neues Passwort anfordern.

Batchdatei funktioniert erst beim 2. Aufruf

  • Themenstarter DeletedUser82294
  • Startdatum

DeletedUser82294

Gast
Ich habe eine Batchdatei geschrieben, mit der ich für meine Qt Projekte Makefiles erstelle.

Code:
@echo off
echo.

cd %1

if exist LIBS.txt (
    set /p LIBS= < LIBS.txt
    qmake -project -after "LIBS += %LIBS% " > NUL

) else qmake -project > NUL


if not %errorlevel% == 0 goto project_failed
    
echo Die Projektdatei wurde erstellt.
echo.

qmake > NUL

if not %errorlevel% == 0 goto makefile_failed

echo Die Makefile wurde erstellt.
echo.
echo Alle Aufgaben abgeschlossen

goto end


:project_failed
echo Bei der Generierung der Projektdatei ist ein Fehler aufgetreten.
goto end


:makefile_failed
echo Die Makefile konnte nicht erstellt werden.
goto end


:end
set /p end=""
Als Parameter (%1) wird der Verzeichnisname übergeben.

Mein Problem ist folgendes. Wenn ich das Script ausführe, dann ist nach der Zeile
Code:
set /p LIBS= < LIBS.txt
die Variable LIBS immer noch leer. Wenn ich aber das Script nocheinmal ausführe (in der gleichen CMD) Funktioniert alles ohne Probleme.
Findet irgend jemand von Euch den Fehler?

Vielen Dank schon mal im Vorraus.
 

DeletedUser61508

Gast
Also bei mir funktioniert der erste Teil problemlos...schaut dann so aus:

Code:
@echo off
echo.

cd %1

if exist LIBS.txt (
    set /p LIBS= < LIBS.txt

)else echo "FAIL"

echo %LIBS%

cd..

Ausgabe ist die Folgende:

Code:
C:\Users\Torridity>call test.bat .\bla

test;test1;test2

C:\Users\Torridity>

Die Frage ist nun, woran es bei dir liegt. Enthält irgendein Pfad oder Dateiname vielleicht Leerzeichen? Falls ja gehören betreffende Dateien in Anführungszeichen. Wie schaut denn dein Inhalt von LIBS.txt aus? Könnte darin irgendwas problematisch sein?
 

DeletedUser

Gast
Der Fehler ist ein bekanntes Problem in Batch.
Bei der Ausführung des IF werden erstmal alle %LIBS% in dem IF Bereich mit dem momentanen Wert ersetzt. Folglich wirken sich Änderungen an Variablen in den Klammern nicht auf den Code in den Klammern aus ;)
Beim zweiten Mal funktioniert es einfach, weil die Variable dann ja schon den Wert hat (du löscht die Variable am Ende des Scripts ja nicht).

Umgehen kann man das mit einem GOTO oder mit einer speziellen Ausführungsmethode (dabei werden die Variablen erst zur Ausführung ersetzt und nicht schon beim Parsen):
Code:
@echo off
SETLOCAL EnableDelayedExpansion
echo.

cd %1

if exist LIBS.txt (
    set /p LIBS= < LIBS.txt
    qmake -project -after "LIBS += !LIBS! " > NUL

) else qmake -project > NUL

REM Rest des Files

ENDLOCAL
 

DeletedUser82294

Gast
Danke. Das werde ich mal probieren.

hat funktioniert (mit goto)
 
Zuletzt bearbeitet von einem Moderator:
Oben