Windows watch命令的Windows模拟是什么?


58

我正在寻找一个Windows程序/脚本/命令行功能,其功能类似于Linux的watch程序。

watch 定期调用另一个程序/以任何方式显示结果,这非常适合每秒刷新一次输出文件或类似文件:

watch cat my-output.txt

或者,更强大地:

watch grep "fail" my-output.txt

我在cygwin的图书馆中寻找过它,但似乎不存在。

Answers:


14

watch可在Cygwin的此处procps列出的软件包中找到(此信息可通过网站上的软件包搜索找到,此处)。我不认为默认cygwin安装程序会安装此软件包,但是我通常会在新安装中选择该软件包以使watch命令可用。

软件包中工具的位置通常与Linux发行版中的软件包名称匹配(watchDebian和Ubuntu上的软件包也包含procps),因此,如果Cygwin软件包搜索功能失败,则Linux发行版中的信息可能会提供线索。


47

自己写。假设文件watch.bat包含:

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

并通过以下方式调用它:

watch echo test

test每5秒回显一次。


@Keilaron:请注意,您的编辑不正确,我必须对其进行修复。请多加注意。
斯科特,

简单但很棒。避免仅为单个命令安装cygwin。Vielen Dank!
Stef

28

Powershell具有“ while”命令。您可以像在Linux中一样使用它:

而(1){您的命令;睡觉5}

Linux版本:

虽然是真的 做你的命令; 睡眠5; 做完了

其他:

while($ true){netstat -an | findstr 23560; 睡5; 日期}


4
您可以使用while (1),因为这1是事实。
TheQuickBrownFox

1
我还发现您可以将“ clear”用作最后一个语句,因此其行为更像watch。
itmuckel

13

通用Windows命令oneliner可以完成此任务:

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

用要重复运行的命令替换“ echo test”。


不错的一个简单的内衬
就能解决问题

6

我编写了这个小PowerShell模块来完成您想要的工作。放进去

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

import-module watch在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
看起来不错,但我建议该函数采用Verb-Noun格式(例如Watch-Command),别名为WatchSet-Alias -Name Watch -item Watch-Command)。
pipe_tape_coder

6

这就是我将在PowerShell中执行的操作:

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

条件while(1)等于while true,无限循环。


6

这是PowerShell的一个衬里:

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

Clear先说。
萨斯坦宁

这取决于您的命令运行多长时间后才能显示出来。...您可以更改顺序,但这是一般性的想法
ErikW

3

您还可以使用PING命令弥补延迟,例如:

@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

当需要检查另一个进程正在积极处理的文件的文件大小时,我遇到了同样的问题。我最终在Windows上克隆了watch的功能。该站点上提供了已编译的exe以及源代码。

注意Windows



1

@harrymc说了什么,除了sleep watch.bat

@ECHO OFF
:loop
  %*
  sleep 5
goto loop

./watch.bat npm运行测试

npm run test 每5秒



-1

我很着急...。我使用了一个建议,并对其进行了一些改动以使其对我有用:

为/ l%g in()做@(回声测试和超时/ t 2)

我将其更改为:

为/ l%g in()做@(test.bat&超时/ t 2)

然后,我使用命令行创建了test.bat文件。就我而言,是:

网络组/域

我发现echo命令只是打印到屏幕上,但没有执行该命令

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.