# 3 Variablen mit Batch vergleichen



## FaSi_David (16. Juli 2008)

Guten Morgen,
in dieser kleinen Batch möchte ich drei Variabelen vergleichen,
und zwar, wenn Service Name und Host Name gleich sind, dann soll bei erfüllter Übereinstimmung mit dem Service Status eine .wav-Datei abgespielt werden. Den Player und die .wav's habe ich, das ich nicht das Problem, mein Problem ist es viel mehr, die Variabelen so zu "verknüpfen", das sie prüfen was ich will ...

Ich sitze da nun schon 2-3 Tage dran, und bekomme es immer noch nicht hin!

Vielleicht könnte mir jemand von euch helfen, eh' ich völlig verzweifel!

Ganz liebe Grüße aus Lünen,
David


@echo off
REM Change to directory of this batch file
cd /d %~dp0

SET PLAYER="playsnd.exe"
SET WAV_PATH=.

set SERVICE_NAME=%1
set SERVICE_STATUS=%2
set HOST_NAME=%3
set AZETI_IP=%4
set INFO_STRING=%5


IF %HOST_NAME% == 195.190.0.*** == %SERVICE_NAME% == memory
GOTO MEMORY

:MEMORY
IF %SERVICE_STATUS% == "UNKNOWN" GOTO UNKNOWN_example_1
IF %SERVICE_STATUS% == "WARNING" GOTO WARNING_example_1
IF %SERVICE_STATUS% == "CRITICAL" GOTO CRITICAL_example_1
IF %SERVICE_STATUS% == "RECOVERY" GOTO RECOVERY_example_1
IF %SERVICE_STATUS% == "OK" GOTO OK
GOTO DONE

:UNKNOWN_example_1
%PLAYER% "%WAV_PATH%\a_unknown_1.wav"
GOTO DONE

:WARNING_example_1
%PLAYER% "%WAV_PATH%\a_warning_1.wav"
GOTO DONE

:CRITICAL_example_1
%PLAYER% "%WAV_PATH%\a_critical_1.wav"
GOTO DONE

:RECOVERY_example_1
%PLAYER% "%WAV_PATH%\a_recovery_1.wav"
GOTO DONE

:OK
%PLAYER% "%WAV_PATH%\ok.wav"
GOTO DONE

ONE

Nunja, sollte es Fragen zu meinem Problem geben, ich beobachte den Threat in der Hoffnung auf schnellstmögliche Hilfe ... denn ich hätte das soo gerne endlich vom Tisch


----------



## takidoso (24. Juli 2008)

Hi ho


FaSi_David hat gesagt.:


> Guten Morgen,
> in dieser kleinen Batch möchte ich drei Variabelen vergleichen,
> und zwar, wenn Service Name und Host Name gleich sind, dann soll bei erfüllter Übereinstimmung mit dem Service Status eine .wav-Datei abgespielt werden.


Also zunächst bin ich mi rnicht ganz sicher was Du machen willst. Obiges ist für mich nicht ganz eindeutig.
Ich nehme an Dass die folgende Zeilen Deinen programmierwunsch gewidmet sind.



> IF %HOST_NAME% == 195.190.0.*** == %SERVICE_NAME% == memory
> GOTO MEMORY



Ich muss zugeben kein Batch Experte zu sein. Daher habe ich im Internet gegoogelt und fand auch keinen Hinweis der Batchsprache ob hier Verknüpfungen mit "AND" und "OR" möglich sind, jedoch kann man mit if ... goto durchaus logisches Und bzw Oder nachbilden.
So ich die richtige Codezeilen aus Deinem Extrakt erkundschaftet habe, verstehe ich sie auch nicht wirklich da sie irgendwie nicht so ganz auf Deinen Text passen mögen.
Ich kann daher nur Mutmaßen das du pseudocodemäßig vielleicht soetwas im Sinn hattest

```
wenn HOST_NAME = "195.190.0.***" und SERVICE_NAME = "memory" dann 
   spiele in Abhängigkeit von SERVICE_STATUS eine wav 
ende von wenn
```

Falls es tatsächle kein Schlüsselwort für logich-UND in BATCH geben sollte, wäre also obiges umzuformulieren in


```
wenn HOST_NAME = "195.190.0.***" dann 
      wenn SERVICE_NAME = "memory" dann 
          spiele in Abhängigkeit von SERVICE_STATUS eine wav 
     ende von wenn
ende von wenn
```

Da offenbar batch die sogenannte strukturierte Programmierung offenbar nicht sonderlich unterstüzt (ich fand bisher keinen Hinweis darauf) müssen hier die Strukturierungen obiges Pseudocodes umgesetzt werden in goto-Anweisungen.


```
wenn HOST_NAME = "195.190.0.***" gehe zu  servicenamen_prüfen 
gehe zu  DONE 
: servicenamen_prüfen
wenn SERVICE_NAME = "memory" gehe zu  wav_wählen 
gehe zu  DONE 
: wav_wählen
spiele in Abhängigkeit von SERVICE_STATUS eine wav 
: DONE
```

Für spiele in Abhängigkeit von SERVICE_STATUS eine wav  ist dann lediglich der Restcode einzusetzen, den Du ab :Memory mit den aneinanderhängenden if-Statements in deinem Code zeigst.
Viel Spaß und Glück bei der Umsetzung

Takidoso


----------

