Quel est l'analogue Windows de la commande de surveillance Linux?


58

Je cherche un programme / script / fonction de ligne de commande Windows qui fonctionne comme le watchprogramme de Linux .

watch appelle périodiquement un autre programme / quel que soit et affiche le résultat, ce qui est excellent pour actualiser un fichier de sortie ou similaire toutes les secondes:

watch cat my-output.txt

ou, plus puissamment:

watch grep "fail" my-output.txt

Je l'ai cherché dans la bibliothèque de cygwin, mais cela ne semble pas être présent.

Réponses:


14

watchest disponible dans Cygwin, dans le procpspackage indiqué ci - dessous (cette information est disponible via la recherche de package sur le site Web, ici ). Je ne pense pas que ce paquet soit installé avec la configuration par défaut de cygwin, mais c’est celui que j’ai généralement choisi pour les nouvelles installations afin que la commande watch soit disponible.

L'emplacement des outils dans les paquetages correspond généralement aux noms de paquet dans les distributions Linux (le paquet contenant également watchprocps sur Debian et Ubuntu aussi). Ainsi, si la fonction de recherche de paquet Cygwin vous échoue, les informations pour / à partir de distributions Linux peuvent fournir des indices.


47

Écrivez votre propre. Disons que le fichier watch.batcontient:

@ECHO OFF
:loop
  cls
  %*
  timeout /t 5 > NUL
goto loop

et appelez-le via, par exemple:

watch echo test

fera écho testtoutes les 5 secondes.


@Keilaron: Notez que votre modification était mauvaise et que je devais la réparer. S'il vous plaît soyez plus prudent.
Scott

Simple mais génial. Évite d'installer cygwin uniquement pour cette commande unique. Vielen Dank!
Stef

28

Powershell a la commande "while". Vous pouvez l'utiliser comme dans Linux:

tandis que (1) {votre_commande; dormir 5}

Version Linux:

bien que vrai faites votre_commande; sleep5; terminé

Autres:

while ($ true) {netstat -an | findstr 23560; dormir 5; Date}


4
Vous pouvez simplement utiliser while (1), parce que 1c'est la vérité.
TheQuickBrownFox

1
J'ai également constaté que vous pouvez utiliser "clear" comme dernière déclaration, de sorte qu'elle se comporte davantage comme une montre.
Itmuckel

13

Une commande Windows générique oneliner pour accomplir ceci:

for /l %g in () do @( echo test & timeout /t 2 )

Remplacez "echo test" par la commande que vous souhaitez exécuter à plusieurs reprises.


sympa, simple, une doublure qui fait le tour
user230910

6

J'ai écrit ce petit module PowerShell pour faire ce que vous cherchiez. Il suffit de le mettre dans

C:\Users\[username]\Documents\WindowsPowerShell\Modules\Watch

et courir import-module watchdans PowerShell.


# ---- BEGIN SCRIPT
# Author:       John Rizzo
# Created:      06/12/2014
# Last Updated: 06/12/2014
# Website:      http://www.johnrizzo.net

function Watch {
    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')]
    param (
        [Parameter(Mandatory=$False,
                   ValueFromPipeline=$True,
                   ValueFromPipelineByPropertyName=$True)]
        [int]$interval = 10,

        [Parameter(Mandatory=$True,
                   ValueFromPipeline=$True,
                   ValueFromPipelineByPropertyName=$True)]
        [string]$command
    )
    process {
        $cmd = [scriptblock]::Create($command);
        While($True) {
            cls;
            Write-Host "Command: " $command;
            $cmd.Invoke();
            sleep $interval;
        }
    }
}

Export-ModuleMember -function Watch

# --- END SCRIPT

1
Cela semble assez beau mais j'encouragerais la fonction à être au format Verb-Noun (par exemple Watch-Command) avec un alias de Watch( Set-Alias -Name Watch -item Watch-Command).
duct_tape_coder

6

Voici comment je le ferais dans PowerShell:

while(1){ netstat -an|grep 1920;start-sleep -seconds 2;clear }

La condition while(1)est équivalente à while true, boucler indéfiniment.


6

C'est une doublure PowerShell:

while ($true) { <your command here> | Out-Host; Sleep 5; Clear }

Je mettrais d' Clearabord.
Sastanin

cela dépend du temps nécessaire à votre commande pour s'exécuter, puis pour afficher ... vous pouvez modifier l'ordre, mais c'est l'idée générale
ErikW

3

Vous pouvez également rattraper un retard en utilisant la commande PING, par exemple:

@echo off
:loop
  cls
  dir c:\temp
  REM 5000mS (5 sec) delay...
  ping 1.1.1.1 -n 1 -w 5000 >NUL
goto loop

2

J'ai eu le même problème lorsque j'ai eu besoin de vérifier la taille d'un fichier en cours de traitement par un autre processus. J'ai fini par cloner la fonctionnalité de watch sur Windows. Le fichier compilé ainsi que la source sont disponibles sur le site.

surveillez Windows


1

J'ai créé une commande de surveillance pour Windows appelée llwatch.

Le code est à la fois sur mon site web landenlabs.com

et aussi sur GitHub

Vous devrez peut-être utiliser x64 pour regarder des programmes x64 et x32 pour les autres. Je ne sais pas à quel point les fenêtres sont difficiles.


Vous ne savez pas pourquoi cela a été rejeté ... Bienvenue dans Super User !
Jpaugh

1

ce que @harrymc a dit sauf avec sleep watch.bat

@ECHO OFF
:loop
  %*
  sleep 5
goto loop

./watch.bat npm lancer le test

npm run test toutes les 5 secondes



-1

J'étais pressé ... J'ai utilisé une suggestion et l'ai modifiée un peu pour fonctionner pour moi:

pour / l% g in () do @ (echo test & timeout / t 2)

Je l'ai changé pour:

pour / l% g in () do @ (test.bat & timeout / t 2)

Et j'ai créé le fichier test.bat avec la ligne de commande. Dans mon cas, c'était:

groupe net / domaine

J'ai trouvé que la commande echo venait juste d'être imprimée à l'écran mais n'exécutait pas la commande

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.