3 Variablen in Batch vergleichen
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
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 ...
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 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
:DONE
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 92155
Url: https://administrator.de/forum/3-variablen-in-batch-vergleichen-92155.html
Ausgedruckt am: 11.05.2025 um 08:05 Uhr
14 Kommentare
Neuester Kommentar
Hallo FaSiDavid1 und willkommen im Forum!
Vielleicht erklärst Du nochmals, was eigentlich übereinstimmen soll (denn eine IP-Adresse, welche mit "195.190.0." beginnt und "memory" passen ja nun wirklich nicht zueinander) und wohin der Sprung dann gehen soll (derzeit landest Du immer bei :MEMORY) bzw, was bei Nicht-Übereinstimmung (was sich leichter einzeln prüfen lässt) zu geschehen hat.
Grüße
bastla
die Variabelen so zu "verknüpfen", das sie prüfen was ich will ...
So ganz lässt sich nicht erkennen, was Du willst ...Vielleicht erklärst Du nochmals, was eigentlich übereinstimmen soll (denn eine IP-Adresse, welche mit "195.190.0." beginnt und "memory" passen ja nun wirklich nicht zueinander) und wohin der Sprung dann gehen soll (derzeit landest Du immer bei :MEMORY) bzw, was bei Nicht-Übereinstimmung (was sich leichter einzeln prüfen lässt) zu geschehen hat.
Grüße
bastla
Hallo FaSiDavid1!
Dann etwa so:
Etwas flexibler wäre folgende Zeile 1:
Grüße
bastla
Dann etwa so:
if "%HOST_NAME:~,10%"=="195.190.0." if /i "%SERVICE_NAME%"=="memory" goto :MEMORY
echo Mindestens ein Kriterium nicht erfüllt!
goto :DONE
:MEMORY
...
echo %HOST_NAME%|findstr /b "195.190.0.">nul && if /i "%SERVICE_NAME%"=="memory" goto :MEMORY
bastla
Hallo FaSiDavid1!
Eine typische Abfrage könnte dann eben so aussehen:
Nach dem selben Schema kannst Du dann alle anderen Möglichkeiten erfassen.
Dein Beispiel von oben mit
kann allerdings (auch abgesehen von den unnötigen Leerzeichen) nur funktionieren, wenn tatsächlich ein Vergleich mit dem Text "195.190.0.***" gewünscht wäre, da "*" hier keine Wildcardfunktion hat, sondern als Zeichen verglichen wird - daher musst Du auf eine der beiden oben dargestellten Varianten (Teilstring, zB erste 10 Zeichen, oder Suche mit "findstr" oder "find") ausweichen.
Grüße
bastla
Eine typische Abfrage könnte dann eben so aussehen:
IF /i "%HOST_NAME%"=="LAPTOP" if /i "%SERVICE_NAME%"=="memory" if /i "%SERVICE_STATUS%"=="UNKNOWN" GOTO UNKNOWN_example_1
Dein Beispiel von oben mit
IF %HOST_NAME% == 195.190.0.*** ...
Grüße
bastla
Hallo FaSiDavid1!
Verwende bitte beim Posten < code>-Tags (ohne Leerzeichen) - damit wird's leichter lesbar ...
... aber soviel ist zu erkennen: Das Problem sind die Anführungszeichen - die von mir verwendete Schreibweise war davon ausgegangen, dass in der Variable keine Anführungszeichen enthalten wären. Lasse daher in den "if"-Zeilen die Anführungszeichen um "%SERVICE_NAME%" und "%SERVICE_STATUS%" jeweils weg.
Grüße
bastla
Verwende bitte beim Posten < code>-Tags (ohne Leerzeichen) - damit wird's leichter lesbar ...
... aber soviel ist zu erkennen: Das Problem sind die Anführungszeichen - die von mir verwendete Schreibweise war davon ausgegangen, dass in der Variable keine Anführungszeichen enthalten wären. Lasse daher in den "if"-Zeilen die Anführungszeichen um "%SERVICE_NAME%" und "%SERVICE_STATUS%" jeweils weg.
Kann es daran liegen, das er eventuell 2 mal das WARNING abfackeln will, da er den HOST einmal expliziet erkennt und einmal weil er als DEFAULT läuft?
Der HOST wird nicht erkannt, da "195.190.0.122" ja nicht als "zentrale" interpretiert werden kann.Grüße
bastla
Hallo FaSiDavid1!
Bringen wir das Ganze auf eine einheitliche Schreibweise - ändere dazu die "set"-Zeilen 6 bis 10 auf:
und setze dann bei allen "if"-Zeilen (hier am Beispiel der Zeile 13) Anführungszeichen auf der linken und rechten Seite des Vergleiches:
Achte dabei darauf, dass es bei den konstanten Vergleichswerten (etwa der IP-Adresse) zwischen den Anführungszeichen und auch vor und nach "==" keine Leerzeichen gibt.
Grüße
bastla
Bringen wir das Ganze auf eine einheitliche Schreibweise - ändere dazu die "set"-Zeilen 6 bis 10 auf:
set "SERVICE_NAME=%~1"
set "SERVICE_STATUS=%~2"
set "HOST_NAME=%~3"
set "INFO_STRING=%~5"
if /i "%HOST_NAME%"=="195.190.0.122" if /i "%SERVICE_NAME%"=="memory" if /i "%SERVICE_STATUS%"=="UNKNOWN" GOTO UNKNOWN_example_1
Grüße
bastla
Moin FiSiDavid1,
Hilfe zum /i-Parameter des IF-Befehls bekommst Du am CMD-Prompt nicht etwa mit
...sondern mit..
... angezeigt.
Dort steht:
Ich setze den Beitrag mal auf "beantwortet" und "geschlossen".
Grüße
Biber
Hilfe zum /i-Parameter des IF-Befehls bekommst Du am CMD-Prompt nicht etwa mit
bastla /? <-------- falsch!
IF /? <---- richtig
Dort steht:
Die /I-Option wird angegeben, um die Groß-/Kleinschreibung beim Vergleich zu ignorieren. Die /I-Option kann auch in der Form Zeichenfolge1==Zeichenfolge2 verwendet werden. Diese Vergleiche sind allgemein, das heißt, wenn beide Zeichenfolgen nur aus Ziffern bestehen, werden die Zeichenfolgen in Zahlen umgewandelt, und es wird ein nummerischer Vergleich durchgeführt.
Ich setze den Beitrag mal auf "beantwortet" und "geschlossen".
Grüße
Biber