PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Batch] 'if defined' will nicht mit 'set var'


zerobit
08.07.2009, 19:08
hallo...
ich habe ein kleines script welches ich mit einem menü erweitert habe
es ist so aufgebaut das ich große auswahl der profiele habe

aber auch schnelles abarbeiten eines default-profiels
welches ich einfach per enter starte

da vor dem eigendlichen befehl noch "standart"-aufgaben durchlaufen müssen,
muss ich die menüauswahl in einer set-variable speichern

aber irgendwie klappt das mit meinem default profiel nicht


Menü

[1] konvertieren in 7-Zip (LZMA, v1, best)
[2] konvertieren in Zip (Deflate, best)
[3] das Battle Script starten
[4] das Battle Script starten (ohne Löschroutine)
[5] Script abbrechen

(default: [1]) Eingabe:
"set" ist syntaktisch an dieser Stelle nicht verarbeitbar.


wenn ich die menüpunkte direkt aufrufe dann gibs keine probleme...

warum funktioniert die makierte codezeile nicht!?


:Menue
echo.Menue
echo.
echo.[1] konvertieren in 7-Zip (LZMA, v1, best)
echo.[2] konvertieren in Zip (Deflate, best)
echo.[3] das Battle Script starten
echo.[4] das Battle Script starten (ohne Loechroutine)
echo.[5] Script abbrechen
echo.
set /p xCall=(default: [1]) Eingabe:
if not defined xCall set xJmpPnt=:PACK1a
if %xCall%==1 set xJmpPnt=:PACK1a
if %xCall%==2 set xJmpPnt=:PACK1b
if %xCall%==3 set xJmpPnt=:PACK2
if %xCall%==4 set xJmpPnt=:PACK2 && set FORS=
if %xCall%==5 echo.abbruch && goto :END0


[:edit]
selbst wenn ich die makierte code-zeile ändere gibt es den selben fehler...
if "%xCall%"=="" set xJmpPnt=:PACK1a


German
08.07.2009, 19:35
Vermutlich liegts nicht an der markierten Zeile, sondern an den nachfolgenden. Da vergleicht er dann sowas
if ==1 ...
wenn du nix eingegeben hast.


:Menue
echo.Menue
echo.
echo.[1] konvertieren in 7-Zip (LZMA, v1, best)
echo.[2] konvertieren in Zip (Deflate, best)
echo.[3] das Battle Script starten
echo.[4] das Battle Script starten (ohne Loechroutine)
echo.[5] Script abbrechen
echo.
set /p xCall=(default: [1]) Eingabe:
if not defined xCall set xJmpPnt=:PACK1a
if "%xCall%"=="1" set xJmpPnt=:PACK1a
if "%xCall%"=="2" set xJmpPnt=:PACK1b
if "%xCall%"=="3" set xJmpPnt=:PACK2
if "%xCall%"=="4" set xJmpPnt=:PACK2 && set FORS=
if "%xCall%"=="5" echo.abbruch && goto :END0

zerobit
08.07.2009, 20:11
hmm... recht haste... vielen dank...

German
08.07.2009, 20:30
hmm... recht haste... vielen dank...
Gern geschehen.

Eine mögliche (ganz andere) Fehlerquelle hab ich noch für dich.
Ganz gefährlich ist sowas:

if "%xCall%"=="4" set xJmpPnt=:PACK2 && set FORS=
Der Teufel steckt im Detail. Das Leerzeichen zwischen :PACK2 und && wird mit in die Variable %xJmpPnt% übernommen.
Ich hab mir folgende Schreibweise angewöhnt:

if "%xCall%"=="4" set "xJmpPnt=:PACK2" && set "FORS="
Kann auch sein, dass das in deinem Fall kein Problem macht, aber falls doch...

zerobit
08.07.2009, 22:25
Gern geschehen.

Eine mögliche (ganz andere) Fehlerquelle hab ich noch für dich.
Ganz gefährlich ist sowas:

if "%xCall%"=="4" set xJmpPnt=:PACK2 && set FORS=
Der Teufel steckt im Detail. Das Leerzeichen zwischen :PACK2 und && wird mit in die Variable %xJmpPnt% übernommen.
Ich hab mir folgende Schreibweise angewöhnt:

if "%xCall%"=="4" set "xJmpPnt=:PACK2" && set "FORS="
Kann auch sein, dass das in deinem Fall kein Problem macht, aber falls doch...

stimmt es ist immer wieder ein problem...

will man das script optisch lesbar machen
oder muss man sich den einschrenkungen hingeben

in diesen fall macht es zwar nichts,
aber ich werd man deine schreibweise übernehmen...

mal sehen wann diese an ihre grenzen stößt :P

nochmal vielen dank...

German
09.07.2009, 00:28
Alles in Allem (und damit will ich es auch gut sein lassen) würde meine Lösung für dich so aussehen:

:Menue
echo.Menue
echo.
echo.[1] konvertieren in 7-Zip (LZMA, v1, best)
echo.[2] konvertieren in Zip (Deflate, best)
echo.[3] das Battle Script starten
echo.[4] das Battle Script starten (ohne Loeschroutine)
echo.[5] Script abbrechen
echo.
set /p "xCall=(default: [1]) Eingabe: "
if not defined xCall set "xJmpPnt=:PACK1a" &goto weiter
if %xCall%==1 set "xJmpPnt=:PACK1a" &goto weiter
if %xCall%==2 set "xJmpPnt=:PACK1b" &goto weiter
if %xCall%==3 set "xJmpPnt=:PACK2" &goto weiter
if %xCall%==4 set "xJmpPnt=:PACK2" &set "FORS=" &goto weiter
if %xCall%==5 echo.abbruch &goto :END0
cls &goto Menue
:weiter
Somit hast du Falscheingaben auch noch abgefangen.