Un equivalente di Windows del comando coda Unix [chiuso]


410

Sto cercando l'equivalente del comando 'tail' di Unix che mi permetterà di vedere l'output di un file di registro mentre viene scritto.


questo aiuta? http://malektips.com/xp_dos_0001.html http://commandwindows.com/server2003tools.htm Ecco il link diretto di Microsoft. L'ho testato sulla mia macchina (solo per curiosità e perché potrei averne bisogno) e funziona benissimo.
johnny,

1
In realtà esiste la coda per XP, è solo che Microsoft non lo installa con la versione standard di XP; lo hanno impacchettato in "Strumenti del Resource Kit di Windows Server 2003". Puoi scaricarlo qui: microsoft.com/downloads/…
Matt Poush,

1
Non esattamente un duplicato, ma vedi qui stackoverflow.com/questions/247234/…
Martin Beckett

mobaXTerm, è gratuito e ha un registro di plugin, puoi fare tail -f /drives/c/logs/mylog.log
surfealokesea

3
Non penso che questo avrebbe dovuto essere chiuso, poiché ho bisogno della stessa cosa per eseguire il debug della traccia nell'applicazione Windows. Si tratta di "strumenti software comunemente usati dai programmatori", che è in tema
kristianp il

Risposte:


137

Suggerirei di installare qualcosa come GNU Utilities per Win32 . Ha la maggior parte dei preferiti, compresa la coda.


5
Ho appena provato a usare GNU tailsu un file da 2 GB ed è soffocato. moreha funzionato bene (almeno visualizzando l'inizio del file).
Eric J.

@EricJ., Lo stesso per me. Su un file da 3 GB posso fare headma non tail... Idee?
Alphaaa,

@Alphaaa: sospetto che abbia a che fare con le chiamate del sistema operativo utilizzate da GNU Utilities. Vedi stackoverflow.com/a/4003487/141172
Eric J.

@EricJ., Grazie, sembra davvero rilevante. Ma ho appena capito che è più facile per me usare una soluzione alternativa: scriverò solo una semplice sceneggiatura che fa un tail:)
Alphaaa

1
Qui credo sia una soluzione migliore: stackoverflow.com/questions/4426442/…
Dung

442

Se usi PowerShell allora funziona:

Get-Content filenamehere -Wait -Tail 30

Pubblicando il commento di Stefan dal basso, in modo che la gente non lo perda

PowerShell 3 introduce un parametro -Tail per includere solo le ultime x righe


13
In realtà questo non è dinamico
Jey Geethan,

16
Questo è buono a sapersi; Grazie. Ma ho avuto un paio di problemi con esso (su Windows 7). (1) visualizza l'intero file (non va bene per un file di registro di grandi dimensioni, motivo per cui tailpuò essere utile) (2) non è così dinamico come vorrei (forse a causa delle modifiche del sistema operativo / file system tra la mia installazione e altri poster ?). Cioè, ho determinato che la shell a Get-Contentvolte non si aggiorna fino a quando non eseguo dirun'altra shell.
mpontillo,

10
Penso che valga la pena ricordare che PowerShell interromperà lo scorrimento / l'uscita se si seleziona qualcosa all'interno della finestra del terminale per darti la possibilità di leggere, copiare / incollare, ecc. Se si preme Invio, riprenderà lo scorrimento.
cbednarski,

19
PowerShell 3 introduce un parametro -Tail per includere solo le ultime x righe
Stefan Haberl

8
Quindi la risposta corretta per Powershell non dovrebbe essere qualcosa del genere Get-Content -Tail 100 -Wait .\logfile.log?
Henno Vermeulen,

62

Ho sempre usato Baretail per la coda in Windows. È gratuito e molto carino.

Modifica: per una migliore descrizione di Baretail vedi questa domanda


Questa è stata la prima soluzione che ha funzionato per me su [gulp] Windows Server 2003 R2 SP1! Super facile con il programma di installazione, ha funzionato per la coda in modo rapido e pronto all'uso :)
cellepo,

Il download e l'esecuzione di eseguibili non firmati su HTTP probabilmente non è una buona idea. Per lo meno, si dovrebbe scaricare attraverso il loro sito HTTPS .
Zero3,

Trovo sorprendente che continuino a mantenere il sito e ad aggiornare il certificato SSL fino ad oggi, mentre il software non si aggiorna dal 2006. Tuttavia funziona benissimo. Esattamente quello di cui avevo bisogno. Windows Defender non trova alcuna minaccia.
Lionet Chen,


24

Chiunque sia interessato a una coda CMD DOS usando i comandi batch (vedi sotto).

Non è perfetto e le linee a volte si ripetono.

Utilizzo: tail.bat -d tail.bat -f -f

@echo off
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
rem tail.bat -d <lines> <file>
rem tail.bat -f <file>

rem ****** MAIN ******
IF "%1"=="-d" GOTO displayfile
IF "%1"=="-f" GOTO followfile

GOTO end

rem ************
rem Show Last n lines of file
rem ************

:displayfile
SET skiplines=%2
SET sourcefile=%3

rem *** Get the current line count of file ***
FOR /F "usebackq tokens=3,3 delims= " %%l IN (`find /c /v "" %sourcefile%`) DO (call SET find_lc=%%l)

rem *** Calculate the lines to skip
SET /A skiplines=%find_lc%-!skiplines!

rem *** Display to screen line needed
more +%skiplines% %sourcefile%

GOTO end

rem ************
rem Show Last n lines of file & follow output
rem ************

:followfile
SET skiplines=0
SET findend_lc=0
SET sourcefile=%2

:followloop
rem *** Get the current line count of file ***
FOR /F "usebackq tokens=3,3 delims= " %%l IN (`find /c /v "" %sourcefile%`) DO (call SET find_lc=%%l)
FOR /F "usebackq tokens=3,3 delims= " %%l IN (`find /c /v "" %sourcefile%`) DO (call SET findend_lc=%%l)

rem *** Calculate the lines to skip
SET /A skiplines=%findend_lc%-%find_lc%
SET /A skiplines=%find_lc%-%skiplines%

rem *** Display to screen line when file updated
more +%skiplines% %sourcefile%

goto followloop

:end

Questo è intelligente, e sto usando le funzionalità esistenti quando il download di uno strumento non è un'opzione! Questo codice consumerà CPU, poiché continuerà a girare in seguito per -f.
Armstrhb,

1
ha avuto lo stesso problema con il download e il consumo di CPU! aggiunta questa riga ping 127.0.0.1 -n 2 > nulprima goto followloop. invia due ping e attende tra 1 secondo. quindi lascerebbe vivere la CPU!: D
Mohsen ZareZardeyni il

Eccezionale! Grazie mille
John Fairbanks il

1
perché utilizzare ping se si potesse utilizzare timeout /t 2?
namezero

23

Esistono diverse opzioni, tuttavia tutte presentano difetti con funzionalità più avanzate.

  • La coda di GnuWin32 è buggy ( α β γ ) - cose come -f semplicemente non funzionano.

  • La coda di UnxUtils sembra migliore (-f funziona, ma --pid sembra non farlo, -n ma non --lines = n fallisce con -f), ma sembra essere un progetto morto.

  • Cygwin è un grosso brutto pazzo, forse potrebbe semplicemente usare il pacchetto DLL e coreutils - ma ha ancora problemi come --pid che non funziona con i processi nativi win32.


19

Ho usato Tail For Windows . Certamente non elegante come l'uso

coda
ma poi stai usando Windows. ;)


Ho una seconda coda per Windows. Mi piace perché posso aprire e monitorare più file nella stessa finestra.
Paolo,

il modo powershell gc -tail non funziona se sei su Posh 1 o Posh 2.x. La funzionalità gc -tail è stata aggiunta in Posh 3.0.
user1390375

16

Con Windows PowerShell puoi usare:

Get-Content <file> -Wait

15

Non ho visto Log Expert da nessuna parte tra le risposte qui.

È personalizzabile ed è abbastanza buono per andare in giro per i file di registro. Finora è il miglior visualizzatore di log grafico di Windows per me.

Sfortunatamente, questo software non è più disponibile. Puoi leggerlo su archive.org .


Adoro le funzionalità di Log Expert, tuttavia la mia esperienza è stata buggy con Win 7 a 64 bit.
Clay,

Mi manca la funzionalità "clear view".
Daniel Hári,

13

Se non si desidera installare nulla, è possibile "creare il proprio" file batch che esegue il lavoro dai comandi standard di Windows. Ecco alcuni suggerimenti su come farlo.

1) Usando find / c / v "" yourinput.file , ottieni il numero di righe nel tuo file di input. L'output è simile a:

---------- T.TXT: 15

2) Usando per / f , analizzare questa uscita per ottenere il numero 15.

3) Usando set / a , calcola il numero di linee di testa che devono essere saltate

4) Usando per / f "skip = n" salta le linee di testa e fai eco / elabora le linee di coda.

Se trovo il tempo, costruirò un tale file batch e lo pubblicherò qui.

MODIFICARE: tail.bat

REM tail.bat
REM
REM Usage: tail.bat <file> <number-of-lines> 
REM
REM Examples: tail.bat myfile.txt 10
REM           tail.bat "C:\My File\With\Spaces.txt" 10

@ECHO OFF
for /f "tokens=2-3 delims=:" %%f in ('find /c /v "" %1') do (
    for %%F in (%%f %%g) do set nbLines=%%F )
set /a nbSkippedLines=%nbLines%-%2
for /f "usebackq skip=%nbSkippedLines% delims=" %%d in (%1) do echo %%d

5
Ecco il batch della spiegazione precedente. Visualizza le ultime 10 righe del file corrente: ____ for / f "tokens = 3" %% f in ('find / c / v ""% 0') imposta nbLines = %% f ____ set / a nbSkippedLines = % nbLines% -10 ____ per / f "skip =% nbSkippedLines% delims =" %% d in (% 0) fa eco %% d
Nicolas

1
Questo è esattamente ciò che vuole il poster e funziona perfettamente.
Jackie Yeh,

Grazie per il codice! L'ho aggiunto alla risposta con il numero di parametro corretto e uno in più al numero di righe. Nota che visualizzerà le linee un'uscita. PS: l'ho usato per codificare un file da 1,5 GB e ho ottenuto i risultati in soli 15 secondi.
Leopoldo Sanczyk,

In realtà, al punto 4 sarebbe anche meglio, penso che usare il comando 'more' che accetta parametri sul numero di righe da saltare. Ancora più veloce penserei.
Philibert Perusse,

8

Ho usato Mtail di recente e sembra funzionare bene. Questo è il tipo di interfaccia grafica come il baretail di cui sopra. inserisci qui la descrizione dell'immagine



5

Prova i servizi di Windows per UNIX . Fornisce conchiglie, awk, sed, ecc. Nonché coda.

Aggiornamento -: Sfortunatamente, a partire dal 2019 questo sistema non è più disponibile nell'area Download Microsoft.


1
Questo ha problemi su Win7 e successivi.
Doug Wilson,

1
Veramente? Stai correndo sottovalutando le risposte di quattro anni? Modo di contribuire.
Dave,

9
@Dave: anche se la domanda è vecchia, la gente la sta ancora guardando cercando di trovare la risposta migliore. Se una risposta di quasi 5 anni fa non è più pertinente o valida, allora perché non dovresti sottovalutarla? L'intero sito si occupa di ottenere informazioni preziose più rapidamente - oggi, non 5 anni fa.
Oliver,

1
@Hellfire - dovresti modificare la risposta con la condizione che non funziona con Wwindows 7. È sciocco solo commentare.
Preimpostazione Sangha


4

DOS non ha un comando tail; puoi scaricare un binario di Windows per GNU tail e altri strumenti GNU qui .



4

DOS typefunziona come * nux cat, anche se proprio cat, tailscarica l'intero file, quindi non è proprio un vero , ma sarà disponibile in un pizzico senza scaricare / installare un vero tailsostituto.


4

Ho appena scritto questo piccolo script batch. Non è sofisticato come la "coda" di Unix, ma si spera che qualcuno possa aggiungerlo per migliorarlo, come limitare l'output alle ultime 10 righe del file, ecc. Se si migliora questo script, si prega di inviarlo per me a derubare ~ [at] ~ gmail.com.

@echo off

:: This is a batch script I wrote to mimic the 'tail' UNIX command.
:: It is far from perfect, but I am posting it in the hopes that it will
:: be improved by other people. This was designed to work on Windows 7.
:: I have not tested it on any other versions of Windows

if "%1" == "" goto noarg
if "%1" == "/?" goto help
if "%1" == "-?" goto help
if NOT EXIST %1 goto notfound
set taildelay=%2
if "%taildelay%"=="" set taildelay=1

:loop
cls
type %1

:: I use the CHOICE command to create a delay in batch.

CHOICE /C YN /D Y /N /T %taildelay%
goto loop

:: Error handlers

:noarg
echo No arguments given. Try /? for help.
goto die

:notfound
echo The file '%1' could not be found.
goto die

:: Help text

:help
echo TAIL filename [seconds]

:: I use the call more pipe as a way to insert blank lines since echo. doesnt
:: seem to work on Windows 7

call | more
echo Description:
echo     This is a Windows version of the UNIX 'tail' command.
echo     Written completely from scratch by Andrey G.
call | more
echo Parameters:
echo    filename             The name of the file to display
call | more
echo    [seconds]            The number of seconds to delay before reloading the
echo                         file and displaying it again. Default is set to 1
call | more
echo ú  /?                   Displays this help message
call | more
echo    NOTE:
echo    To exit while TAIL is running, press CTRL+C.
call | more
echo Example:
echo    TAIL foo 5
call | more
echo    Will display the contents of the file 'foo',
echo    refreshing every 5 seconds.
call | more

:: This is the end

:die

bella idea usando il comando "type", ma non puoi farcela!
eadmaster il

Questo continua a ricaricare il file di testo.

la versione batch di echo ha un comportamento strano, se non viene fornito alcun argomento, ma se si chiama il comando come echo.con un punto finale sulla parola (e non come argomento separato) stamperà una nuova nuova riga.
scragar


3

Se si desidera utilizzare le porte Win32 di alcune utility Unix (anziché installare Cygwin), consiglio le utility GNU per Win32 .

Peso più leggero di Cygwin e più portatile.



3

In Far Manager , premere F3su un file per accedere al visualizzatore standard, quindi il Endtasto per passare alla fine del file.

Se il file viene aggiornato, Far Manager lo scorrerà automaticamente.



0

I visualizzatori di log grafici, sebbene possano essere molto utili per visualizzare i file di log, non soddisfano la necessità di un'utilità della riga di comando che può essere incorporata negli script (o nei file batch). Spesso un comando così semplice e generico può essere utilizzato come parte di una soluzione specializzata per un particolare ambiente. I metodi grafici non si prestano facilmente a tale uso.



0

Penso di aver trovato un'utilità che soddisfa la necessità della funzione tail nei file batch. Si chiama "mtee" ed è gratuito. L'ho incorporato in un file batch su cui sto lavorando e fa molto bene il lavoro. Assicurati di inserire l'eseguibile in una directory nell'istruzione PATH e via.

Ecco il link:

MTEE

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.