2017-01-06 2 views
1

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拡張子を削除します。1.マージのことができるようにするために、2つの別々のスクリプトを作成しましたので、データは次のように提示されています

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でdatetimeフィールドを作成できません。ソフトウェア。 "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 

そして、それぞれの行に「.sdat」の部分を削除するVBSスクリプト::私は「

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 

バッチファイルには、各行の先頭に完全なファイル名を含むすべてのファイルをマージします別のバッチファイルを使用して、両方のスクリプトを順に呼び出しました。私が正しく理解していれば

答えて

2

、このような単純なものは、あなたが望むすべてを行う必要があります。

あなたが正しく理解してきた
@(For /F "Tokens=1-5* Delims=-:" %%A In ('FindStr/R "^" *.sdat' 
) Do @Echo(%%A-%%B-%%C %%F)>Machinelogs.txt 
+0

は、それが動作します。ありがとうと私はスクリプトを正しく作成することができません:p。 – Mike

関連する問題