我在合并通过机器监控软件生成的文件时遇到了一些问题。该软件生成的文件显示某个机器在给定时间内的状态,如下所示:
格式:Time;Machine;Status
23:40:52;KP66;ms:4
23:39:54;KP86;ms:4
23:49:24;KP86;ms:9999
23:38:17;Wasmachine1;ms:4
23:43:36;Wasmachine1;ms:9999
23:41:29;Meten1;ms:4
每隔15分钟,会生成一个包含此数据的新文件。每个文件的文件名显示日期+生成的时间,如29-02-2016-23-50.sdat
(以.sdat为扩展名,可以用记事本打开)。
为了能够将这些文件正确输入可视化软件并将其可视化,我需要为某台机器记录某个状态的日期和时间。日期包含在文件名中,以及文件本身的时间。
我创建了两个单独的脚本,以便能够1.将所有文件合并到一个文本文件中,然后2.删除.sdat扩展名,因此数据显示如下:
29-02-2016-05-20 5:05:37;KP85;ms:3
29-02-2016-05-20 5:05:39;KP85;ms:9999
29-02-2016-05-20 5:06:04;KP85;ms:3
29-02-2016-05-20 5:07:51;KP86;ms:4
29-02-2016-05-20 5:17:58;KP86;ms:9999
29-02-2016-05-20 5:19:13;KP86;ms:4
问题是,因为" -05-20"部分(在日期之后)仍然存在,它不能被识别为日期,因此我无法在vis中创建日期时间字段。软件。 " 05-20"每个文件都有变化。我需要一些可以使我的数据看起来像这样的脚本:
29-02-2016 5:05:37;KP85;ms:3
29-02-2016 5:05:39;KP85;ms:9999
29-02-2016 5:06:04;KP85;ms:3
29-02-2016 5:07:51;KP86;ms:4
这些是我迄今使用的脚本。用于合并所有文件的批处理文件,包括每行开头的完整文件名:
@echo off
(for %%f in (*.sdat) do (
for /f "tokens=1 delims=" %%a in (%%f) do @echo %%f %%a
))>Machinelogs.txt
用vbs脚本删除" .sdat"每一行都有一部分:
Const ForReading = 1
Const ForWriting = 2
Const FileIn = "Machinelogs.txt"
Const FileOut = "Machinelogs.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(FileIn, ForReading)
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, ".sdat", "")
Set objFile = objFSO.OpenTextFile(FileOut, ForWriting)
objFile.WriteLine strNewText
objFile.Close
我已经使用了另一个批处理文件来顺序调用这两个脚本。
答案 0 :(得分:2)
如果我理解正确,那么简单的事情就应该做你想做的事情:
@(For /F "Tokens=1-5* Delims=-:" %%A In ('FindStr/R "^" *.sdat'
) Do @Echo(%%A-%%B-%%C %%F)>Machinelogs.txt