【发布时间】:2017-05-21 04:58:43
【问题描述】:
我在合并通过 machinemonitoring-software 生成的文件时遇到了一些问题。该软件会生成文件,显示特定机器在给定时间的状态,如下所示:
格式: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.xml 中创建日期时间字段。软件。 “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
我使用了另一个批处理文件来顺序调用这两个脚本。
【问题讨论】:
标签: windows file batch-file vbscript scripting