Windows Batch: Befehl in einer Schleife wiederholen (watch-Äquivalent)
Unter Linux kennt jeder den watch-Befehl: Er führt einen Befehl in regelmäßigen Abständen aus und aktualisiert die Ausgabe im Terminal. Windows bietet kein natives Äquivalent – aber mit einem einfachen Batch-Skript lässt sich dasselbe Verhalten nachbauen. Ideal für die Überwachung von Netzwerksitzungen, Prozessen oder anderen sich ändernden Systemzuständen.
Das Grundprinzip: Endlosschleife mit Pause
Das folgende Batch-Skript führt einen Befehl wiederholt aus, wartet jeweils einige Sekunden und leert dabei den Bildschirm – exakt wie watch unter Unix. Als Beispiel wird net sess verwendet, das alle aktiven Netzwerksitzungen anzeigt:
@echo off
:loop1
ping -n 5 127.0.0.1 > NUL
cls
net sess
goto loop1
pause
Erklärung der einzelnen Zeilen
@echo off unterdrückt die Ausgabe der Befehle selbst – nur deren Ergebnisse werden angezeigt. ping -n 5 127.0.0.1 > NUL erzeugt eine Wartezeit von ca. 4 Sekunden (5 Ping-Pakete × ~1 Sekunde). Die Ausgabe wird nach NUL umgeleitet, also verworfen. cls leert den Bildschirm, net sess zeigt die aktuellen Sitzungen, und goto loop1 springt zurück an den Anfang der Schleife.
Wartezeit anpassen
Die Pause lässt sich durch Ändern der Ping-Anzahl anpassen. Für eine Sekunde Pause: ping -n 2 127.0.0.1 > NUL (1 Sekunde ≈ n−1). Für 10 Sekunden: ping -n 11 127.0.0.1 > NUL. Ab Windows Vista steht alternativ timeout zur Verfügung:
@echo off
:loop1
cls
net sess
timeout /t 5 /nobreak > NUL
goto loop1
Andere nützliche Befehle für die Schleife
Das Muster lässt sich mit beliebigen Befehlen kombinieren. Hier einige praktische Anwendungsfälle:
REM Aktive TCP-Verbindungen überwachen
:loop1
cls
netstat -an
timeout /t 3 /nobreak > NUL
goto loop1
REM Prozessliste überwachen
:loop1
cls
tasklist /fi "imagename eq chrome.exe"
timeout /t 5 /nobreak > NUL
goto loop1
REM Freien Speicherplatz überwachen
:loop1
cls
dir C: | findstr "bytes free"
timeout /t 10 /nobreak > NUL
goto loop1
PowerShell-Alternative
Mit PowerShell lässt sich dasselbe eleganter umsetzen – und der Befehl kann als Parameter übergeben werden:
while ($true) {
Clear-Host
Get-Date
net sess
Start-Sleep -Seconds 5
}
Wer häufig auf macOS oder Linux arbeitet, kann den nativen watch-Befehl nutzen – eine entsprechende Implementierung für macOS findet sich im Beitrag watch für macOS. Weitere Windows-Skript-Tipps gibt es im Bereich Windows-Administration.


