zockervogel
Goto Top

Zwei IPs in einer Batch vergleichen

Hallo,

ich habe in zwei Variablen IPs gespeichert.

Vermutlich kann ich per Batch diese nicht vergleichen, da noch die Punkte enthalten sind?
(ich hatte das bei time mit den ":" gehabt) hier habe ich geholfen bekommen diese zu entfernen.

Kann ich die Punkte bei den IPs auch entfernen, bzw. wie kann ich die vergleichen.

if %ip1% == %ip2% exit 

funktioniert nicht.

mfg
Peter


ja, ich habe schon gegooglet aber nichts gefunden. Vielleicht bin ich ja auch nur blind.

Content-ID: 3489846973

Url: https://administrator.de/contentid/3489846973

Ausgedruckt am: 25.11.2024 um 09:11 Uhr

runthegaunz
runthegaunz 30.07.2022 aktualisiert um 00:11:48 Uhr
Goto Top
Moin,

if "%ip1%"=="%ip2%" exit  

Funktioniert bei mir mit Anführungszeichen.

LG, runthegaunz
Zockervogel
Zockervogel 30.07.2022 um 01:39:25 Uhr
Goto Top
das klappt bei mir, warum auch immer nicht.

Peter
3479126418
3479126418 30.07.2022 aktualisiert um 10:14:47 Uhr
Goto Top
Zitat von @Zockervogel:

das klappt bei mir, warum auch immer nicht.

Peter
Das muss gehen, wenn nicht, dann hast du wohl Leerzeichen in einer deiner Variablen.
Lass dir mal folgendes ausgeben und prüfe ob zwischen den IPs und den Anführungszeichen irgendwo Leerzeichen existieren
echo "%ip1%" "%ip2%"  
Wenn ja ist klar warum der Vergleich fehlschlägt, sie sind dann eben nicht gleich und du musst die Leerzeichen eliminieren.

Vermutlich kann ich per Batch diese nicht vergleichen, da noch die Punkte enthalten sind?
Doch natürlich kann man das, es sind nur Strings und Punkte sind in Batch keine Sonderzeichen die man escapen müsste.

Wobei man ja heutzutage eher gleich zur PowerShell greift und nicht mehr zu 80er Jahre Batch 🙈
Zockervogel
Zockervogel 30.07.2022 um 20:22:11 Uhr
Goto Top
So funktioniert das für mich.
Vielleicht zu kompliziert, aber so geht es halt.

for /f "tokens=2 delims==" %%a in ('wmic nicconfig where IPEnabled^=True get IPAddress /format:list ^| findstr /i "IPAddress"') DO set "IP1=%%a"  
echo "Ip-Adresse Host" %IP1%  

set IP1=%IP1:"=%  
set IP1=%IP1:{=%
set IP1=%IP1:}=%
set IP1=%IP1:.=%

set IP2=192168177209

if %IP1% equ %IP2% exit

Peter
TwistedAir
TwistedAir 31.07.2022 um 01:14:32 Uhr
Goto Top
Hallo Zockervogel,

deinen Code habe ich mal nachgestellt und dabei (in meiner Umgebung) auf zwei Probleme gestoßen:
  1. das Ergebnis aus der wmic-Abfrage beinhaltet sowohl IPv4- als auch IPv6-Adressen. Beide gehen in die Variable %IP1% ein. Folglich kann der Vergleich mit %IP2% nicht wahr sein.
  2. Was passiert wenn IP1 = 192.168.177.2 und IP2 = 192.168.17.72 ist (und die Batch die Werte ohne Punkte vergleicht? Dann ist IP1 = IP2. Passt auch nicht.

Du kannst ja mal folgende Zeilen, die die Problematik veranschaulichen, in eine Batch packen.
IF 192.168.177.209==192.168.177.209 (ECHO wahr) ELSE (ECHO falsch)
IF 192.168.177.209==192168177209 (ECHO wahr) ELSE (ECHO falsch)

REM Vergleich beide IPs mit Punkte
IF 192.168.177.2==192.168.17.72 (ECHO wahr) ELSE (ECHO falsch)

REM gleiche IPs ohne Punkte
IF 1921681772==1921681772 (ECHO wahr) ELSE (ECHO falsch)

Anscheinend ist das, was du der Variablen %IP1% zuweist nicht in dem Format, dass man sie mit der zweiten Variablen vergleichen kann. Da wird zunächst das erste Zeichen der Variablen verglichen, dann das zweite, u. s. w. Ja, Computer sind dumm und man muss ihnen alles haarklein vorkauen. face-wink
Wenn bei dir ie erste Variable korrekt zurechtgestutzt ist, dann klappt es auch mit dem von den Kollegen oben angeführten String-Vergleich.

Zur korrekten Verwendung des IF-Befehls anbei ein Link: SS64 - "IF"
The == comparison operator always results in a string comparison.

Using parentheses or quotes will force a string comparison:
IF (2) GEQ (15) echo "bigger"
IF "2" GEQ "15" echo "bigger"