Nachfrage zur CMD.com - Abfrage IPv4

thorbaro

Cadet 4th Year
Registriert
Juni 2017
Beiträge
85
Hallo zusammen.
Ich möchte gerne per batch eine ipv4-abfragen. Anbei meine Zeile:
--- cut ---
ping -n 1 192.168.5.50 >nul 2>&1
if %errorlevel% equ 0 (
echo * Die IP-Adresse ist erreichbar. Das Skript wird fortgesetzt. *
goto Setze_NAS_Laufwerke
) else (
echo * Die IP-Adresse ist nicht erreichbar. Die Sicherung wird lokal gespeichert. *
goto no_nas
exit /b 1
)
---cut---
Funktioniert nicht. Der Errorlevel stimmt nicht. Beispiele, wann dennoch errorlevel "0" ist:
Veränderung 192.168.5.50 in 192.168.5.51 - errorlevel = 0
192.168.5.50 in 192.168.6.50 - errorlevel > 0
IP deaktiviert errorlevel = 0

Warum? Wo ist hier mein Gedankefehler?
Danke, Thorsten.
 
Evtl PowerShelll statt Batch nehmen (da gibt es direkt Test-Connection)? Evtl einen anderen Weg verwenden, um die Verfügbarkeit des NAS zu prüfen?

Beitrag bereits gemeldet, dass es kein Leseratikel ist.
 
  • Gefällt mir
Reaktionen: sikarr, CoMo, aragorn92 und eine weitere Person
Tja. Habe ich schon als Antwort befürchtet. Bei mir ist jedoch z.Zt. alles per cmd. Mit Powershell sehe ich den Vorteil woanders. Hierbei geht es um einfache Sicherungsscripte.
Wo ist der Fehler in meinem Gedankengang beim beigefügten script. Auch, wenn ich dies mit Powershell abrufen würde, möchte ich dennoch eine Lösung erhalten.
 
@Mystery1988:
Wieso einfache Fragen nicht einfach testen?
1732867971750.png


Nein, Umgebungsvariablen sind case-insensitive.
Ergänzung ()

thorbaro schrieb:
Bei mir ist jedoch z.Zt. alles per cmd. Mit Powershell sehe ich den Vorteil woanders. Hierbei geht es um einfache Sicherungsscripte.
Also ich starte ständig PowerShell-Scripte aus cmd-raus, ich lege meine PowerShell-Scripte auch in .cmd-Dateien. Ich weiß jetzt nicht, warum ein einfaches Sicherungsscript in Batch aber nicht in PowerShell geschrieben sein dürfte... gerade wenn es einfach ist, lässt es sich ja einfacher übertragen.
 
versuche es mal hiermit:

ping -n 1 192.168.5.50 >nul 2>&1
if %errorlevel% equ 0 (
echo * Die IP-Adresse ist erreichbar. Das Skript wird fortgesetzt. *
goto Setze_NAS_Laufwerke
) else (
echo * Die IP-Adresse ist nicht erreichbar. Die Sicherung wird lokal gespeichert. *
goto no_nas
)

:no_nas
exit /b 1


exit /b 1 wird ausgeführt, wenn die IP-Adresse nicht erreichbar ist, aber da goto no_nas den Block bereits verlässt, wird exit /b 1 ignoriert.

Habe leider kein Windows es selber zu überprüfen
 
thorbaro schrieb:
Beispiele, wann dennoch errorlevel "0" ist:
Veränderung 192.168.5.50 in 192.168.5.51 - errorlevel = 0
192.168.5.50 in 192.168.6.50 - errorlevel > 0
Das bringt nichts, wenn du nicht dazu schreibst, welche der IPs tatsächlich erreichbar sind.

Hab bei mir mal kurz getestet, da sind die errorlevel wie zu erwarten.

Evtl. hilft es ja wenn du an den ping noch beispielsweise "|find "TTL" anhängst oder mal die Umleitung auf NUL weglässt, um zu beobachten.
 
  • Gefällt mir
Reaktionen: tollertyp
@nurse: Wenn es daran liegt, würde aber im echo immer das richtige ausgegeben, dann wäre nicht die Schlussfolgerung, dass was mit dem errorlevel nicht funktioniert.
 
Was mir aus dem Stehgreif einfallen würde.. Wenn man ICMP-Abfragen macht, kommt öfter (vor allem der erste Ping) noch keine Antwort. Wenn Du dann die IP änderst sind die ARP-Tabellen ja noch aktuell auf beiden Seiten und Du hast dadurch evtl. Glück.
 
ping 192.168.5.50 -n 3 -w 1000 -l 2000 >nul
if %ERRORLEVEL%==1 (
echo.
echo 192.168.5.50: Nicht erreichbar!
) else (
echo.
echo 192.168.5.50: Erreichbar!
)
 
nutrix schrieb:
Verwendest Du für NAS DHCP? Warum dann keine fixe IPs?
Die IP ist statisch
Ergänzung ()

Anbei noch ein Test - habe mir Eure Sachen mal angesehen:
@Echo off
# ping -n 1 192.168.5.25 >nul 2>&1
ping 192.168.5.25
if %errorlevel% equ 0 (
echo * Die IP-Adresse ist erreichbar. Das Skript wird fortgesetzt. *
goto Setze_NAS_Laufwerke
) else (
echo * Die IP-Adresse ist nicht erreichbar. Die Sicherung wird lokal gespeichert. *
goto no_nas
)

:Setze_NAS_Laufwerke
echo NAS-Laufwerke werden eingerichtet...
pause
exit /b 0

:no_nas
echo Lokale Sicherung wird gestartet...
pause
exit /b 1

--- cut -
Anbei die Ausgabe:

---cut ---
Ping wird ausgeführt für 192.168.5.25 mit 32 Bytes Daten:
Antwort von 192.168.5.196: Zielhost nicht erreichbar.
Zeitüberschreitung der Anforderung.
Antwort von 192.168.5.196: Zielhost nicht erreichbar.
Zeitüberschreitung der Anforderung.

Ping-Statistik für 192.168.5.25:
Pakete: Gesendet = 4, Empfangen = 2, Verloren = 2
(50% Verlust),
* Die IP-Adresse ist erreichbar. Das Skript wird fortgesetzt. *
NAS-Laufwerke werden eingerichtet...
Drücken Sie eine beliebige Taste . . .

--- cut ---

Ich habe wohl ein anderes Problkem. Woher kommt denn die *.196? Warum 2 empfangen?
Während der Ausführung lief in einem anderen Fenster ein Dauerping auf *.25 - Zielhost n. ereichbar.
Ergänzung ()

Ach, sorry. *.196 ist der eigene PC (DHCP). Dennoch... warum 50% Verlust? Die *.25 ist definitiv . offline
 
Zuletzt bearbeitet:
@tollertyp $ComputerName = "192.168.5.50"

$BatchFilePath = "C:\users\thorsten\desktop\test.bat"

if (Test-Connection -ComputerName $ComputerName -Count 1 -Quiet) {
Write-Host "$ComputerName ist erreichbar. Die Batchdatei wird gestartet." -ForegroundColor Green

Start-Process -FilePath $BatchFilePath -WindowStyle Normal
} else {
Write-Host "$ComputerName ist nicht erreichbar." -ForegroundColor Red
}
 
So (oben auf die "drei Punkte" und dann auf "</>" klicken):
PowerShell:
$ComputerName = "192.168.5.50"

$BatchFilePath = "C:\users\thorsten\desktop\test.bat"

if (Test-Connection -ComputerName $ComputerName -Count 1 -Quiet) {
Write-Host "$ComputerName ist erreichbar. Die Batchdatei wird gestartet." -ForegroundColor Green

Start-Process -FilePath $BatchFilePath -WindowStyle Normal
} else {
Write-Host "$ComputerName ist nicht erreichbar." -ForegroundColor Red
}
 

Ähnliche Themen

Zurück
Oben