无法在批处理脚本中的同一行中回显

Bru*_*uce 8 batch-file

我有包含多行的txt文件,我需要创建一个日志,以便在日志中存储以下信息:
文件名
最后修改
包含单词"valid"的行数

我把一个.bat文件放在一起,但它将输出分成两行.

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

使用nul类型我清除FilesReceived.txt文件的内容.然后我遍历log类型的文件.
然后我计算包含单词valid和find/c的行,并且我也回显最后修改的时间戳.

但是输出看起来像:

---------- transaction_20160505_1005A.log:6492
10/06/2016 04:37 pm

我不知道是什么产生了破灭.最终,我希望每个日志文件有一行,如下所示:

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

希望你们能帮助我.

谢谢,

布鲁斯

Ste*_*han 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"
)
Run Code Online (Sandbox Code Playgroud)

如果你想保留你的订单,那就有点复杂了:你不能强制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
Run Code Online (Sandbox Code Playgroud)