我有一个目录,里面有一堆要转储用于记录的文本文件,每个文件都采用干净的制表符分隔格式。每个文件都用时间戳命名,这也是我需要的。我需要将它们合并到一个文件中,以便我可以将其卸载到图形中并作为统计数据呈现。我可以使用类似下面的命令,它可以工作,但我没有用于呈现指标的文件时间戳。
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
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 目录- 显示文件和子文件夹的列表。
- 回声- 在屏幕上显示消息,打开或关闭命令回显。
- 对于/f- 循环命令以执行另一个命令的结果。
答案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"
类似地,如果日期和时间通过位置而不是分隔符来区分。