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-Key: 7448124667

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

Printed on: July 27, 2024 at 08:07 o'clock

Member: Hubert.N
Hubert.N Jun 07, 2023 updated at 08:27:00 (UTC)
Goto Top
Moin

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

Gruß
Member: stevie72
stevie72 Jun 07, 2023 updated at 08:35:15 (UTC)
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
Member: KowaKowalski
Solution KowaKowalski Jun 07, 2023 at 09:32:38 (UTC)
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
Member: Doskias
Doskias Jun 07, 2023 at 09:36:37 (UTC)
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
Member: stevie72
stevie72 Jun 07, 2023 at 10:02:16 (UTC)
Goto Top
@Doskias

Hallo grüße Dich,
habe ich gemacht mit timeout /?
Member: stevie72
stevie72 Jun 07, 2023 at 10:04:46 (UTC)
Goto Top
@ KowaKowalski

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

Einen schönen Tag,
Stefan
Member: Hubert.N
Hubert.N Jun 07, 2023 at 10:12:16 (UTC)
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ß
Member: stevie72
stevie72 Jun 07, 2023 at 11:09:14 (UTC)
Goto Top
@Hubert.N

Vielen Dank für die Infos !
Grüße, Stefan
Mitglied: 7426148943
7426148943 Jun 07, 2023 updated at 11:39:01 (UTC)
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 ...
Member: stevie72
stevie72 Jun 07, 2023 updated at 12:18:29 (UTC)
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
Mitglied: 7426148943
7426148943 Jun 07, 2023 updated at 12:23:02 (UTC)
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