• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBSでテキストファイルを作成に関して質問です)

VBSでテキストファイルを作成に関して

このQ&Aのポイント
  • VBSでEventquery.vbsを使ってログの世代管理をしたい
  • テキストの吐き出しがうまくいかない
  • 質問: VBSでテキストファイルの吐き出しをする方法を教えてください

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

Option Explicit Dim WshShell,D,DD,MM,YY,E,I,N,F Dim NN, FF, SO Set WshShell = CreateObject("WScript.Shell") D = DateAdd("D", -1, Date) DD = Right("0" & CStr(Day(D)), 2) MM = Right("0" & CStr(Month(D)), 2) YY = CStr(Year(D)) E = MM & "/" & DD & "/" & YY NN = "C:\" & YY & MM & DD & ".log" '●出力先ファイル名 Set FF = CreateObject("Scripting.FileSystemObject").CreateTextFile(NN, True) Set SO = WshShell.Exec("cscript %systemroot%\system32" _ & "\eventquery.vbs /V /FI ""Datetime eq " _ & E & ",12:00:00AM-" _ & E & ",11:59:59PM""").StdOut SO.ReadLine: SO.ReadLine: SO.ReadLine Do Until SO.AtEndOfStream     FF.WriteLine SO.ReadLine Loop FF.Close ★JavaScriptではないので引用符(")の前に¥は不要です。 というか構文エラーです。 ★1日前はDateAdd("D", -1, Date)が正しい。Date-1は結果OKで、 本筋ではありません。日付の内部形式が変更された場合、動作が 保証されません。 ★年、月、日を得るのにMid(D,x,y) は感心しません。 ロケールの影響を受けるので、動作が一定しません。 ★C:\WINDOWS\system32\eventquery.vbs はPC個別の設定の影響を 受けるので、%systemroot%\system32\eventquery.vbs が正しい。 ★eventquery.vbs の日付指定は MM/DD/YYYY です。 但し、ファイル名に/は使用できないので、YYYYMMDD.logとしました。 >リダイレクトをすると前のファイルが閉じてしまってエラーが起きる エラーではなく、ファイルとして保存される前に処理が終了してしまう ということです。出来上がったテキストをコマンドプロンプトで実行 すると、正常に処理できます。eventquery.vbsが終了してもリダイレクトを 扱う Shell 即ち、コマンドプロンプトが終了しないからです。 RunメソッドではShellも直ぐに終了してしまいます。

saddiq
質問者

お礼

何度もありがとうございます。 いただいた、VBSで問題なく動きました。 そこで、1点疑問なんですが DD = Right("0" & CStr(Day(D)), 2) MM = Right("0" & CStr(Month(D)), 2) の部分だけ、解読できなかったんですが、これは、Day,Monthが1ケタだった場合、0を入れるようにしたのかと思いますが、2がついてるのでどう解読していいのかわかりませんでした。 問題なく動きましたが、極力自分で理解したく、できたら教えてもらえたらなぁと思います

その他の回答 (2)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

>Day,Monthが1ケタだった場合、0を入れるようにしたのかと思いますが そうです。 日が 1~9 の場合は2桁の 01~09 にするため、前"0"を付けますが、 日が10~の場合は前"0"を付けると、"010"のように3桁になるので、 右の2文字を取り出すようにします。2文字のデータの右の2文字は 即ち、元のデータですので、日が1桁でも問題ありません。 If文を使うと以下のようになりますが、横着した訳です。 DD = CStr(Day(D)) If Len(DD) < 2 Then   DD = "0" & DD End If

saddiq
質問者

お礼

nda23さん、 なるほどぉ。そういうことだったんですね。 個人的な解釈でしたが、Day,Monthが1ケタだった場合、0を入れるようにしたのは わかりましたが、"2"がついてる意味がわからなく、わからない物をスクリプトに するのは良くないと思い、if文で作りました。 意味を説明していただくと、なるほど~の一言です。 本当、ためになりいろいろとありがとうございます。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

以前に回答したnda23です。 以前の回答でP = "C:\"とし、漢字空白を半角空白にすれば動くんです けどね・・・ 何故、Runメソッド+リダイレクトにしなかったと言うと、失敗する からです。リダイレクトされたファイルが閉じて、ファイルとして 記録される前にShellが終了してしまって、ファイルが残らないから です。

saddiq
質問者

お礼

nda23さん 何度もありがとうです。本当たすかります。 あまりわかってなかったもので、理解も含め、自分なりに書いてみました。 そうなんですね。リダイレクトをすると前のファイルが閉じてしまってエラーが起きるんですね。 ご回答ありがとうございます。 この内容に付加して、テキストを作成する方法を教えてもらえますでしょうか?