• 締切済み

バッチファイルについて

教えて下さい。 複数のログファイルを、バッチファイルをつかってひとつのCSVファイルにまとめます。 forfiles コマンドを使って、所定内の*.csv ファイルを typeで出力し 1つのCSVファイルにまとめます。 しかし、各ログファイルの文末が改行されておらず1つにまとめると 前のファイルの行末に次のログファイルの1文字目が来てしまいます。 ログファイルを、全て添付の下側の画像のように改行する設定にできたらいいですが 数が多いのでバッチコマンドに何か手を加える方向でいきたいです。 改行のCSVファイルを用意して、ログファイルの間に繰り返しかませることも できるならありかと考えています。 何かいい方法はないでしょうか?

みんなの回答

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.2

「VBScript」による回答ですので、「バッチ」でなければならないようでしたら、無視してください。 このプログラムは、「~.log」ファイル群の存在するフォルダにプログラムファイルを放り込んで、プログラムファイルをダブルクリック(「シングルクリック」→「Enter」の方が確実)すると、同じフォルダ内に「MergeLog.csv」という結果ファイルを作成します。 最後に「Finished!」と表示しますので、「OK」を押して、終了してください。 以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。 「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず、半角です。 できたプログラムファイル(「~.vbs」ファイル)を、「~.log」ファイル群が存在するフォルダ内に放り込んで、ダブルクリックしてください。 Option Explicit Dim a, c, cv, f, gf, i, j, lg, n(), so, x Set so = CreateObject("Scripting.FileSystemObject") Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName)) c = - 1 For Each f In gf.Files If LCase(so.GetExtensionName(f.Name)) = "log" Then c = c + 1 ReDim Preserve n(c) n(c) = f.Name End If Next For i = 0 to c - 1 For j = i + 1 to c If n(i) > n(j) Then x = n(i) n(i) = n(j) n(j) = x End If Next Next Set cv = so.OpenTextFile(gf & "\MergeLog.csv", 2, True) For i = 0 to c Set lg = so.OpenTextFile(gf & "\" & n(i), 1) a = lg.ReadAll cv.WriteLine a lg.Close Set lg = Nothing Next cv.Close Set cv = Nothing Set gf = Nothing Set so = Nothing MsgBox("Finished!") 簡単な説明です。 Option Explicit 「厳密に」というような意味ですが、気にしないでください。 Set so = CreateObject("Scripting.FileSystemObject") ファイルやフォルダを扱えるようにしていますが、今回は特に、テキストファイルを扱うのにも必要です。 Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName)) プログラムファイルの存在するフォルダを取得しています。 c = - 1 「log」ファイル、カウント用変数の初期化。 For Each f In gf.Files プログラムファイルの存在するフォルダ内のすべてのファイルを1つずつ処理。 If LCase(so.GetExtensionName(f.Name)) = "log" Then もし、拡張子が「log」なら、 c = c + 1 1つカウント。 ReDim Preserve n(c) n(c) = f.Name 配列変数を用意して、格納しています。 End If Next を、繰り返しています。 For i = 0 to c - 1 For j = i + 1 to c If n(i) > n(j) Then x = n(i) n(i) = n(j) n(j) = x End If Next Next 配列変数に格納したファイル名を「小さい順」にソートしています。 Set cv = so.OpenTextFile(gf & "\MergeLog.csv", 2, True) 同じフォルダ内に「MergeLog.csv」ファイルを「書き込み専用」で「新規作成」しています。 For i = 0 to c 「Log」ファイルの数だけ処理。 Set lg = so.OpenTextFile(gf & "\" & n(i), 1) 「Log」ファイルを「読み込み専用」で開いています。 a = lg.ReadAll 一気に全部読み込んでいます。 cv.WriteLine a 「MergeLog.csv」ファイルに書き出しています。 通常、一気に全部読み込んだ場合、通常、「cv.Write」となるのですが、最後に「改行」を書き加えるため、「cv.WriteLine」としています。 lg.Close Set lg = Nothing 「Log」ファイルを閉じています。 Next を、すべての「Log」ファイルで繰り返しています。 cv.Close Set cv = Nothing 「csv」ファイルを閉じています。 Set gf = Nothing Set so = Nothing MsgBox("Finished!") あとは、終了処理で、最後に「Finished!」と表示しています。

istudent
質問者

お礼

解決しました。ありがとうございました。 各行毎の説明まで記載してありがとうございます。 vbsは使いませんでしたが、勉強になります

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

typeでなく、more を使えば良いかと思います。

istudent
質問者

お礼

解決しました。ありがとうございました。

関連するQ&A

  • バッチファイル ファイル内で改行したい

    バッチファイルで、echo出力文字列が長くなる場合など(&でコマンドをつなげた場合も)見づらいので、任意のところで改行したいです。 コマンドプロンプトでは^(キャヘット?)で可能のようなのですが、バッチファイルの場合はどのようにすればよいでしょうか?よろしくお願いします。

  • バッチファイルについて

    ファイルの中身を抽出するバッチを作成しました。 そのバッチファイルを実行し、test.csvというファイル名をつけて出力できたんですが、出力パスも指定することは可能なんでしょうか? find.bat > test.csv

  • バッチファイルでcsvファイルに追記していきたい

    C:\log\abc のディレクトリの中に、 log.csv log1.csv log2.csv log3.csv.... という複数のファイル(最終番号は絶えず変動する)があり、 それぞれは1行4カラム記載されています。 やりたいことは、バッチファイルにより log.csvのカラム内容 log1.csvのカラム内容 log2.csvのカラム内容 log3.csvのカラム内容 が最終番号のcsvファイルまで1つのlogR.csvに纏まることです。 下記のバッチファイルを組んでみたのですが、 C: CD \log\abc COPY log.csv logR.csv type log1.csv >> logR.csv type log2.csv >> logR.csv type log3.csv >> logR.csv これだと、追記が2行目3行目とならず、1行目の横にずっと広がって追記されてしまいます。 また、バッチファイルの指示が番号指示になってしまいますので、この指示番号から外れた ファイルがあった場合は、書き込みがされなくなります。 やりたいことは、 ●行として追記されること。 ●logの番号.csvを全て自動で読みだして追記することです。 http://okwave.jp/qa/q1371517.html の方法は試したのですが、どうもうまくいきませんでした。 お手数をおかけいたしますが宜しくお願い致します。

  • バッチファイルでファイル数計算

    現在仕事で一日に大量のファイルが作成され、それの集計を行っています。ですので、そのファイルの集計を行えるバッチファイルを作成していますが、思ったものができません。 特定のファイル数の集計は行えるのですが、作成された時間おきに集計できるようにしたいんです。 例えば、 9:00に2ファイル作成された バッチファイル実行→ログには9:00分が出力 (ファイル名及びファイル数2がログとして出力) 10:00には50ファイル作成された バッチファイル実行 ↓ ログに以下が出力 9:00に出力分 10:00に出力分(ファイル名及びファイル数が50としてログ に出力) このようなことをバッチファイルで作成する事は無理でしょうか? ご助言宜しくお願い致します。

  • Windowsのバッチファイルでcallコマンド時にログを残す方法について

    お世話になっております。 Windowsのバッチファイルについての質問です。 Windowsのバッチファイル内で、さらにバッチファイルをcallコマンドに よって、呼び出しているのですが、その呼び出したバッチファイルの logを残したいのですが、実装方法が分かりません。 # UNIXのscriptコマンドのようなコマンドがあれば実装できると # 考えたのですが、存在していないようです。 callコマンドは、リダイレクトorパイプが使えないらしいので、 以下のような記述だとlogを出力することができません。 call test.bat > test.log ご存知の方がいらっしゃいましたら、ご教示下さい。 以上、よろしくお願いいたします。

  • バッチファイルで改行の出力

    バッチファイルで,改行のみをファイルに追記したいのですがどのようにすればできますか? echo >> output.txt とすると「ECHO は <OFF> です。」と出力されてしまいます. 全角を出力すれば見た目は同じですが,純粋に改行のみの出力方法をお願いします.

  • DOS findコマンドのバッチでストールする

    DOSコマンドプロンプトで.batファイルを作成。 内容は find "2007:01" access_log_2007_04_11.txt >log2007041101.csv このバッチファイルを、検索するaccess_log_2007_04_11.txt と同じフォルダー上において、ダブルクリックで起動すると。 コマンドプロンプトが開くのだが、以前実行した、 find "2007:00" access_log_2007_04_05.txt >log2007040500.csv が、延々と実行され。 コマンドプロンプトを閉じても log2007040500.csv を、消しても消しても、作成される。 システムを落とすしかなくなる。のです。 4月の頭では正しく動作していたんですが???

  • csvファイルを結合するバッチファイル作成方法

    こんにちは。 フォルダ名cccの中にある2つのcsvファイル、sheet1とsheet2を 結合してketsugoというcsvファイルつくるために、 バッチファイルを作成しようとしています。 (sheet1とsheet2のcsvファイルは4万行前後/シートで、 今後結合させるファイル数を増やす予定です。 手作業では難しいと思い、バッチ処理を検討中です。) C:\aaa\My Douments\ccc>copy /y sheet1.csv+sheet2.csv ketsugo.csv というコマンドが、コマンドプロンプト上で実行できます。 (aaaやcccはファイル略称で、漢字や半角スペース含む) 次にウィンドウズのメモ帳を開き、同じコマンドを入力し、 拡張子.batのバッチファイルを作りました。 作成したバッチファイルを開いてコマンドを実行させようと しましたが、容量ゼロの、アプリケーションを選択させる ファイルしかできません。コマンドの中に半角スペースを含む ファイル名がある場合は、""でくくるルールがあるそうですが、 実際に上記のコマンドのどこからどこまでを""でくくったら よいかわかりません。その他にも不備な点がありましたら 改善方法を教えていただきたいと思います。 よろしくお願いします。

  • バッチファイル テキストファイル内の最後の\以下を削除したい

    バッチで、あるテキストファイル内の最後の\以下を削除して、その結果をバッチの値として利用したいです。 ●テスト条件 %TEMP%のtest.txt に以下のテキスト。 C:\Program Files\software\top xyz ●求める結果: 行末から最初の\以下の文字列を削除。この文字列をバッチファイルで使いたい。 C:\Program Files\software\ ●試したコマンド: なし 全体の流れとしては、バッチでquery取得したパスの不要な部分を削除して、求まったパス(のdirの結果を出力するために)を再度バッチで利用したいです。適切なコマンド・方法がありましたらお願いいたします。

  • コマンドプロンプトのコマンドを使ってバッチファイルを作ってみたいのですが

    プログラミングについてはコマンドプロンプトでバッチファイル(ログファイルの作成など)を何度か作成したことのあるだけの初心者なのですが、 バッチファイルは簡単で幅広い実用性があるように感じています。  コマンドプロンプトを使ったバッチファイルでどのようなことができるのか実用例が載っている本を探しています。  これは役に立つ!という本がありましたら是非教えていただけませんか?

専門家に質問してみよう