2016-06-11 31 views
8

我有一個包含幾行的txt文件,我需要建立一個註銷他們在日誌存儲以下信息:
文件名
最後修改
計數含有「有效」字樣的行不能在批處理腳本同一線路回聲

我把一個.bat文件放在一起,但它將輸出分成兩行。

type nul > FilesReceived.txt & for %f in (*.log) do (
find /c "valid" %f & echo(%~tf)>> LogsReceived.txt 
) 

使用類型nul我清除FilesReceived.txt文件的內容。然後我遍歷類型爲log的文件。
然後我用find/c計算包含單詞valid的行,並且還回顯上次修改的時間戳。

但是輸出的樣子:

---------- transaction_20160505_1005A.log:6492
2016年10月6日下午4點37

我不知道什麼是生成這些破折號。最終我希望每個日誌文件有一行如下:

transaction_20012B.log:6492 10/06/2016 04:37 pm。

希望你們能幫助我。

感謝,

布魯斯

+4

我希望更多的網友貼出這樣的一個首要問題。 :-) –

回答

2

find打印破折號,如果它處理的文件。當從STDIN處理時(type file.ext /c |find "string"只打印計數)它不會。

有一招不換行寫:<nul set /p"=Hello"

如果你可以用另一種秩序生活,這是很容易組裝它::

@echo off 
for %%f in (*.bat) do (
    <nul set /p "=%%f %%~tf " 
    type %%f|find /c "echo" 
) 

如果你想保持你爲了它是一個更復雜一點:你不能強迫find不換行寫的,所以你必須使用一個技巧(另一for):

@echo off 
(for %%f in (*.txt) do (
    <nul set /p "=%%f: " 
    for /f %%i in ('type %%f^|find /c "valid"') do (<nul set /p "=%%i ") 
    echo %%~tf 
))>LogsReceived.txt 
+0

由於性能方面的原因,我會使用類似'<「file.ext」find/C「string」'的重定向方式,所以在這裏不需要'type' ... – aschipfl

1

您可以通過另一個for得到find命令的輸出,並把它放在任何地方,你想:

@echo off 

(for %%f in (*.log) do (
    for /F %%c in ('find /c "valid" ^< %%f') do echo %%f: %%c %%~tf 
)) > LogsReceived.txt