とっておきの「夜食」教えて下さい

環視フォルダ内に新しく追加されたファイルをメールで送信する設定をしています。
以下のバッチを使用しているのですが、pdfファイルのみを送信したいのですがどのように記述すればよいでしょうか?

Dim Fs, strPath, Fl, F, NewFile, NewFileFP, OutF
Set Fs = CreateObject("Scripting.FileSystemObject")
strPath = "C:\Users\マイPC\Desktop\監視ファイル送信\"
NewFile = ""
Set Fl = Fs.GetFolder(strPath)
For Each F In Fl.Files
If F.Name > NewFile Then
NewFile = F.Name
End If
Next
NewFileFP = Fl & "\" & NewFile
Dim WshShell, BtnCode
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objShell = CreateObject("Wscript.Shell")
Set oMsg = CreateObject("CDO.Message")
oMsg.From = "ファイル送信元 <差し出す側のメールアドレス>" '送信元
oMsg.To = "送信する宛先メールアドレス" '送信先
oMsg.Bcc = "宛先サブメールアドレス"
oMsg.Subject = "新着ファックスの送信" '件名
oMsg.TextBody = "新着FAXファイルをお送りします。" 'メール本文
oMsg.AddAttachment NewFileFP '添付
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = 2
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = "メール送信サーバー"
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = 587
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = 1
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = "アカウント名"
oMsg.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/s … = "パスワード"
oMsg.Configuration.Fields.Update
oMsg.Send
Set OutF = Fs.OpenTextFile("C:\FileSend\Fsend.log",8)
OutF.WriteLine "Date[" & date & "] Time[" & time & "] File[" & NewFile & "]"
OutF.Close
Fs.DeleteFile NewFileFP
objShell.Popup "メール送信しました。", 0, "送信完了", 0
Set Fs = Nothing
Set Fl = Nothing
Set OutF = Nothing

質問者からの補足コメント

  • 実を言うと、VBSについては全くわからないド素人です。WEBサイトをあちこち参考にして引用して使っています。すみません。
    FAXが届くとPCに保存されるようになっていて、保存されるフォルダを監視し、新しく追加されたファイルを一旦デスクトップの別フォルダへコピーします。その別フォルダを「監視ソフト」を使って監視し、今回質問したバッチを動かすというしくみにしています。
    FAXが来た時に、席をはずしていると気が付かないことがあるので、メールで送信することにしたのです。
    それで、FAXが「ti」という拡張子のついたファイルからPDFに変換しているらしいのです。別フォルダへ追加ファイルがコピーされたときに、「ti」のファイルもコピーしてしまって、そのファイルとPDFと二つのファイルがメールで送信されることとなってしまっています。なので、PDFだけ送信するようにしたいというわけなのです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/07/28 21:40
  • 参考にしたサイトは下記です。
    https://plaza.rakuten.co.jp/mscrtf/diary/2012062 …
    https://plaza.rakuten.co.jp/mscrtf/diary/2012062 …
    https://note.chiebukuro.yahoo.co.jp/detail/n8385

    さすがにコマンドを自分で考えるのは難しいです。お力をお借りできれば幸いです。

      補足日時:2017/07/28 21:41
  • 忘れていました。デスクトップの別フォルダにコピーされたFAXデータはメール送信ができたらすべて削除されるようにするのは、変わらずそのままで大丈夫です。

      補足日時:2017/07/28 21:47

A 回答 (2件)

ANo.1です。

フォルダ監視(フォルダに新しいファイルが配置されたことを検知する部分)は別途プログラムで行っていて、質問のスクリプトは新しいファイルが検知されたときに呼び出されるということで良いですか。
それなら、最初の
For each F In Fl.Files
 ~
Next
の部分の中身が変で、この~の中に、ファイルFがpdfか否かの判定とpdfだった場合のメール送信の全てを記述するべきです。例えば以下のように。
’ ここから
If Fs.GetExtensionName(F.Name)="PDF" Then
 NewFileFP = Fl & "\" & F.Name
 ' ここにメール送信処理
End If
Fs.DeleteFile F.Name
' ここまで (動作未検証)

なお、拡張子によって処理を分ける記述例は下記に。
http://bayashita.com/p/entry/show/75

ちなみにフォルダ監視もVBSで記述することはできます。その場合はWMI Serviceを利用してファイル生成を監視するのが効率的ですが、Windowsにある程度詳しくないと書くのが難しいです。
    • good
    • 0
この回答へのお礼

ご丁寧にコードを書いていただきありがとうございました。
組み入れてみたのですが、うまく動作しませんでした。

やはり素人にはハードルが高すぎるので、あきらめます。
ありがとうございました。

お礼日時:2017/07/31 16:27

ちょっと分からないですが質問のリストだと、フォルダに複数のファイルが追加されたとき名前順で最も大きいファイルだけが処理されますよね。

後のファイルは?
あとFileSystemObjectを使っているのは何故ですか。ファイル取得だけならDirで十分ですし、Dirならワイルドカード指定して.pdfのみ抽出とか簡単ですけど。
また最後にメールしたファイルを削除していますが、.pdf以外のファイルは削除するのか残すのかどちらにしたいのですか。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報