2016-06-11 34 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