2017-03-16 2 views
0

Ich möchte das erste Argument meines Batch-Skript als Variable verwenden. Wenn es FULL enthält, setze ich alle meine Variablen auf 1 und wenn es leer ist, werde ich nach jedem fragen.Batch Skript Bedingungen für Variablen

Aber ich kann nicht mein Code funktioniert:

@echo off 
     color 02 

    ::----------------------------------------- 
    :: Variables 
    set Preset=%1 
    set Profile=%2 
    set NeedToPassTheTests=1 
    set PublishAPI=0 

    REM --------------------- 
REM We fill the variables depending on the arguments 
echo(%1 
if defined Preset (

if "%Preset%"=="FULL" (
echo FULL 
set PublishOCPP=1 
set NeedToPassTheTests=1 
set PublishAPI=1 
) 

) else (
    REM No preset so we are going to ask 
    set /p PublishAPI="Publish API ? (0 or 1).............. ? " 
    set /p NeedToPassTheTests="Test the projects before ? (0 or 1).............. ? " 
) 


echo NeedToPassTheTests %NeedToPassTheTests% 
echo %PublishAPI% 

echo. 
pause 

I

Die Syntax des Befehls falsch erhalten, ist

Und auch mein Echo bei der Ende drucke den Wert nicht (wenn ich meine Wenns entferne) zeigt es nur an, dass Echo ausgeschaltet ist.

Ich beginne mit .bat-Dateien, ich habe versucht, nur mit dem ist leer Test (von hier genommen: What is the proper way to test if variable is empty in a batch file?) und es funktioniert auch nicht.

Wissen Sie warum?

UPDATE: Es funktioniert, wenn ich FULL als Argument übergeben, aber meine Variablen werden nicht aktualisiert. Ist der Parameter jedoch leer, funktioniert er nicht (dh er fordert mich nicht auf, die Variablen zu füllen).

+1

Verwenden Sie ':: comment' nicht innerhalb eines * Codeblocks * (eingeklammerte Abfolge von Anweisungen) - verwenden Sie' rem 'Das' :: 'ist ein beschädigtes Etikett und Beschriftungen innerhalb von Codeblöcken können zu unerwarteten Ergebnissen führen. – Magoo

+0

Verwenden Sie die Syntax 'if"% varname% "==" value "(dothis) else (dothat)', um Strings zu vergleichen, die Trennzeichen wie Leerzeichen enthalten können, oder Sie erhalten einen Syntaxfehler. Die Anführungszeichen bewirken, dass die enthaltenen Werte als eine einzelne Zeichenfolge interpretiert werden. – Magoo

+0

wenn "% Preset%" == "" gibt mir auch einen Fehler mit falscher Syntax :( – user2088807

Antwort

0
set NeedToPassTheTests = 1 

Entfernen Sie die Leerzeichen. Batch reagiert empfindlich auf Räume auf oth Seiten der Zuordnung - Sie setzen eine Variable mit dem Namen „NeedToPassTheTests Raum“ auf einen Wert von „Raum 1“

für variable var Um zu testen, ist leer:

if defined var (echo variable is not empty) else (echo variable is empty) 

Quirk:

echo(%var% 

wird die Variable zeigen, wenn sie nicht leer oder eine E ist mpty line wenn es ist (nicht echo status)

+0

wenn definiert Preset gibt mir auch einen Fehler – user2088807

+0

Welchen Fehler gibt es? – Magoo

+0

Ich habe keinen Fehler mehr mein schlechtes. Aber wenn meine Variable leer ist (keine Argumente übergeben, Echo% 1 "ECHO ist aus", wird sie als nicht leer angesehen. – user2088807

1

Ich bin nicht sicher, welche Fehler im Code sind, aber ich kann mehrere Bugs in einer Sekunde sehen.

set NeedToPassTheTests=1 wird die Variable auf den Wert NeedToPassTheTests1

set NeedToPassTheTests<space>=1 genannt wird gesetzt NeedToPassTheTests<space> zu 1

set NeedToPassTheTests<space>=<space>1NeedToPassTheTests<space> zu <space>1 gesetzt wird.

Also zunächst alle unnötigen Leerzeichen loswerden.