将 Windows 文本文件与标题或日期连接起来?

将 Windows 文本文件与标题或日期连接起来?

我有一个目录,里面有一堆要转储用于记录的文本文件,每个文件都采用干净的制表符分隔格式。每个文件都用时间戳命名,这也是我需要的。我需要将它们合并到一个文件中,以便我可以将其卸载到图形中并作为统计数据呈现。我可以使用类似下面的命令,它可以工作,但我没有用于呈现指标的文件时间戳。

for %f in (*.txt) do type “%f” >> output.txt

是否有一个选项可以将文件的名称写入文件内容的上方或下方,或者可以将条目最后修改的时间戳写入文件?

正如我提到的,最终产品是一个获取图表的 Excel 电子表格,因此如果有更好的方法从多个文本文件中获取该图表,我也会对此感兴趣。

为了添加上下文,文本文件是每小时生成的格式化日志文件,以数字形式的日期/时间戳命名,扩展名为 .txt。

答案1

是否有一个选项可以同时写入文件的名称?

还用于echo将文件名添加到输出文件。

以下是示例批处理文件,您可以根据需要进行修改:

测试.cmd:

@echo off
setlocal enabledelayedexpansion
for /f %%f in ('dir /b *.txt') do (
  echo filename: %%f >> output.txt 
  type "%%f" >> output.txt
  )
endlocal

笔记:

  • dir否则将使用的输出,.txt文件将被处理多次。

使用示例和输出:

F:\test\test>dir
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test\test

12/08/2016  14:04    <DIR>          .
12/08/2016  14:04    <DIR>          ..
11/08/2016  21:07                 8 a.txt
11/08/2016  21:07                 8 b.txt
11/08/2016  21:08                 8 c.txt
               3 File(s)             24 bytes
               2 Dir(s)  1,769,524,736,000 bytes free

F:\test\test>type *.txt

a.txt


test1

b.txt


test2

c.txt


test3

F:\test\test>..\test

F:\test\test>type output.txt
filename: a.txt
test1
filename: b.txt
test2
filename: c.txt
test3

进一步阅读

答案2

您可以()将多个命令组合成一个块,以便将它们的输出重定向到文件,如下所示:

@echo off
setlocal EnableDelayedExpansion

if exist output.txt del output.txt
for /f "delims=" %%f in ('dir /b /od *.txt') do (
   echo %%~nf && type "%%f"
) >> output.txt

endlocal

我使用&&连接命令,由于重定向,括号无论如何都是必需的。
批处理解决了 @DavidPostill 的批处理未处理的几个问题:
1- 如果文件“output.txt”存在,它将添加到自身。您可以使用 将其从循环中排除IF %%f NEQ output.txt (...),也可以在开始时将其删除。2-
使用 按日期对文件进行排序,dir /od这使得该过程独立于文件名的格式 - 如果按字母顺序排序,则可能按时间顺序排序,也可能不按时间顺序排序。3-
要将文件名时间戳用作 CSV 字段,在写入 CSV 文件之前会删除其扩展名。

如果你需要将文件名解析为 2 个 CSV 字段(日期和时间),那么你必须用逗号替换空格,例如

set x=%%~nf && set x=%x: =,% && echo %x% && type "%%f"

类似地,如果日期和时间通过位置而不是分隔符来区分。

相关内容