2016-04-08 6 views
0

ちょっとした問題が発生しました。.batファイル.txtを1つのファイルにマージします(filenameを含みますが、 ';'で区切られます)。

私が働いている会社で使用されている監視ソフトウェア(製造ホール内のロボットに使用)は、15分ごとにログファイル(.sdat)を生成します。ログファイルの内容は次のようになります。

構文:Time;machine;status

13:53:23;KP85;ms:9999

13:53:49;KP85;ms:3

13:54:54;KP85;ms:4

14:06:04;KP85;ms:9999

13:51:38;Robot1;ms:9999

構文:Filename:Time;Machine;Status

等...

私はこのようなそれぞれの新しい行の開始時にファイル名を含め、一つの大きなファイルにすべてのログファイルを連結するために管理してきました

01-03-2016-00-20.sdat:0:07:40;KP65;ms:3

01-03-2016-00-20.sdat:0:09:09;KP65;ms:4

01-03-2016-00-20.sdat:0:09:11;KP65;ms:3

私は時間だけでなく、(ファイル名に含まれています)日付マシンの特定の状態がログに記録されたを必要とするので、私はこれをした

01-03-2016-00-20.sdat:0:09:13;KP65;ms:4

など。

理由があります。ただし、これをSQL管理スタジオにインポートすると、ファイル名と最初の列(時刻)が ':'でなく ':'で区切られているため、4ではなく3つの列が認識されます。私はSQLクエリでそれを解決しようとしましたが、LEFT()とRIGHT()で日付と時刻を分けていますが、時刻が9時59分59秒から10時00分に切り替わるときの時刻フィールドのフォーマットは、時間フィールドの余分な文字を作成します(したがって、列のデータは ':9:59:59'のようになりますが、これは有効な時間フィールドではありません)。おそらくSQLで行うこともできますが、このような小さな問題に対してSQLコードを複雑にするのが好きなようです。

この時点で、私はこの問題を早期に解決する方がよいと考えました。大きなファイルを生成するバッチファイル内では、Management Studioは3つの列の代わりに4つを認識します。これは私の.batファイルは、現時点ではどのように見えるかです:

@echo off findstr "^" *.sdat >output.txt

何私はこの権利を取得するためにしなければならないのですか?事前に

おかげで、

マイクSohns

答えて

0
@echo off 
(for %%f in (*.sdat) do (
    for /f "delims=" %%a in (%%f) do @echo %%f;%%a 
))>output.txt 

注:これは空白行を呑み込んでしまいますが、私はあなたのケースでは問題ではないと思います。はいの場合、コードを適合させることができます。

+0

空行は関係ありませんが、%% i – Mike

+0

が見つからないため出力が生成されません。 '%% f'(編集済み) – Stephan

+0

ありがとう、ありがとう。私は仕事に戻ったときに月曜日にそれを試してみましょう! – Mike

0

あなたはSDATの拡張子を持つ連結されているすべてのログファイルは、あなたがSDATを交換する必要があることを考える:SDATのために、持っているために;分離されたCSV。

これを達成するには、バッチスクリプトを使用してテキストファイルの部分文字列を置き換えるこの他の回答(How to replace substrings in windows batch file)でバッチスクリプトを使用できます。

+0

生成されているテキスト(各行の先頭にあるファイル名)を同じバッチファイルで検索して置き換えることは可能ですか? – Mike

関連する問題