stevie72
Goto Top

Frage zu einer Batch: Warten auf Netzwerk bereit

Hallo zusammen,

ich habe eine batch geschrieben die mit Robocopy einen Ordner auf ein Ziel System kopiert.
Meine Frage ist, gibt es einen Befehl oder eine Möglichkeit vorher zu prüfen ob das Netzwerk bereit ist
(was mitunter 5 min dauern kann) und dann wenn´s bereit ist die Aktion mit Robocopy zu starten..´
Ich habe hier im Forum einen Beitrag gelesen der von leknilk0815 beantwortet wurde..
diesen hier meine ich Mit Batch Netzwerkverbindung prüfen
vielleicht gibt´s ja eine Möglichkeit den code zu modifizieren ..

Vielen Dank vorab.

Stefan

Content-ID: 7448124667

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

Ausgedruckt am: 25.11.2024 um 11:11 Uhr

Hubert.N
Hubert.N 07.06.2023 aktualisiert um 10:27:00 Uhr
Goto Top
Moin

:loop
timeout 20
if not exist <Ziel>> goto loop
robocopy...

Gruß
stevie72
stevie72 07.06.2023 aktualisiert um 10:35:15 Uhr
Goto Top
Hallo Hubert N.
daran hatte ich auch schon gedacht timeout zu verwenden ..
dein Skript versucht 20 sek ein Ziel zu verifizieren wenn nicht verfügbar wieder von vorn andernfalls weiter mit robocopy richtig?

Grüße
KowaKowalski
Lösung KowaKowalski 07.06.2023 um 11:32:38 Uhr
Goto Top
Hi Stefan,


lass erst nen ping los und mach weiter wenn er antwortet.


ping -n 1 -w 200 192.168.0.103 >nul
if ERRORLEVEL 1 goto ENDE

rem ... hier die net use Anmeldung ...

:ENDE


mfg
kowa
Doskias
Doskias 07.06.2023 um 11:36:37 Uhr
Goto Top
Moin
Zitat von @stevie72:
Hallo Hubert N.
daran hatte ich auch schon gedacht timeout zu verwenden ..
dein Skript versucht 20 sek ein Ziel zu verifizieren wenn nicht verfügbar wieder von vorn andernfalls weiter mit robocopy richtig?

Bin zwar nicht Hubert, aber nein:

Durch Timeout wartet das Skript 20 Sekunden, bevor er prüft ob das Share vorhanden ist. Ist das nicht der Fall, geht es wieder von vorne los, also wieder 20 Sekunden warten. Das wiederholt sich bis das Share erreichbar ist.

Mittwochsfrage: Wieso nicht einfach mal einen unbekannten Befehl, in dem Fall offenbar timeout, nachschalgen?

Gruß
Doskias
stevie72
stevie72 07.06.2023 um 12:02:16 Uhr
Goto Top
@Doskias

Hallo grüße Dich,
habe ich gemacht mit timeout /?
stevie72
stevie72 07.06.2023 um 12:04:46 Uhr
Goto Top
@ KowaKowalski

Vielen Dank!!
Sehr Hilfreiche Antwort!!!!
Das löst wohlmöglich mein Problem

Einen schönen Tag,
Stefan
Hubert.N
Hubert.N 07.06.2023 um 12:12:16 Uhr
Goto Top
Zitat von @stevie72:

Hallo Hubert N.
daran hatte ich auch schon gedacht timeout zu verwenden ..
dein Skript versucht 20 sek ein Ziel zu verifizieren wenn nicht verfügbar wieder von vorn andernfalls weiter mit robocopy richtig?

Grüße

Nein... Es wird alle 20 Sekunden geprüft, ob das Ziel erreichbar ist.

Aber mit einem Ping gehts natürlich auch face-smile

Gruß
stevie72
stevie72 07.06.2023 um 13:09:14 Uhr
Goto Top
@Hubert.N

Vielen Dank für die Infos !
Grüße, Stefan
7426148943
7426148943 07.06.2023 aktualisiert um 13:39:01 Uhr
Goto Top
Zitat von @KowaKowalski:

Hi Stefan,


lass erst nen ping los und mach weiter wenn er antwortet.


ping -n 1 -w 200 192.168.0.103 >nul
if ERRORLEVEL 1 goto ENDE

rem ... hier die net use Anmeldung ...

:ENDE


mfg
kowa

Das Ping ohne find oder findstr keine zuverlässigen Errorlevel zurückliefert ist auch schon Jahrzehnte alt ....
https://stackoverflow.com/questions/9329749/batch-errorlevel-ping-respon ...
stevie72
stevie72 07.06.2023 aktualisiert um 14:18:29 Uhr
Goto Top
@7426148943

Hallo Grüße Dich.
Gut ich habe mich über die Resultate schon gewundert.
Welchen weg würdest Du gehen eine Abfrage ob das Netzwerk bereit ist und wenn ja dann weiter ..
Ich habe schon etliche Erfolglose Versuche hinter mir.
mit der IP von google 8.8.8.8 hatte ich es auch schon versucht .. das lieferte mir auch kein verlässliches Ergebnis.

AGAIN:
ping -n 1 -w 8.8.8.8 >nul
if ERRORLEVEL 1 goto AGAIN

rem ... hier die net use Anmeldung ...

:ENDE
7426148943
7426148943 07.06.2023 aktualisiert um 14:23:02 Uhr
Goto Top
Ich würde ja stattdessen gleich auf Powershell umsteigen,
while(!(Test-Connection X.X.X.X -Quiet -Count 1)){sleep 1}
# whatever comes next

wenn du bei Batch bleiben willst sprachunabhängig bspw. direkt über WMI
@echo off
set host=X.X.X.X
:start
echo Checking host ...
for /f "tokens=2 delims==" %%a in ('wmic path win32_PingStatus where ^(Address ^= "%host%"^) get statuscode /value') do set status=%%a  
if "%status%" == "0" (echo Host %host% is online) else (timeout /t 1 >nul &goto :start)  
echo Now do what you want
pause